|
@@ -0,0 +1,172 @@
|
|
|
|
|
+@echo off
|
|
|
|
|
+setlocal enabledelayedexpansion
|
|
|
|
|
+
|
|
|
|
|
+echo ====================================
|
|
|
|
|
+echo Visual Studio Solution Files Copier
|
|
|
|
|
+echo ====================================
|
|
|
|
|
+echo.
|
|
|
|
|
+
|
|
|
|
|
+REM Get the current directory
|
|
|
|
|
+set "SOURCE_DIR=%CD%"
|
|
|
|
|
+set "TARGET_DIR=%SOURCE_DIR%\.srcout"
|
|
|
|
|
+
|
|
|
|
|
+echo Source Directory: %SOURCE_DIR%
|
|
|
|
|
+echo Target Directory: %TARGET_DIR%
|
|
|
|
|
+echo.
|
|
|
|
|
+
|
|
|
|
|
+REM Clear and create target directory
|
|
|
|
|
+if exist "%TARGET_DIR%" (
|
|
|
|
|
+ echo Clearing existing .srcout directory...
|
|
|
|
|
+ rmdir /s /q "%TARGET_DIR%" 2>nul
|
|
|
|
|
+ if exist "%TARGET_DIR%" (
|
|
|
|
|
+ echo Warning: Could not completely clear .srcout directory
|
|
|
|
|
+ timeout /t 2 >nul
|
|
|
|
|
+ )
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+echo Creating .srcout directory...
|
|
|
|
|
+mkdir "%TARGET_DIR%" 2>nul
|
|
|
|
|
+if not exist "%TARGET_DIR%" (
|
|
|
|
|
+ echo Error: Could not create .srcout directory
|
|
|
|
|
+ pause
|
|
|
|
|
+ exit /b 1
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+echo.
|
|
|
|
|
+echo Copying files to .srcout root directory...
|
|
|
|
|
+
|
|
|
|
|
+REM Initialize counters
|
|
|
|
|
+set "COPIED_COUNT=0"
|
|
|
|
|
+set "SKIPPED_COUNT=0"
|
|
|
|
|
+
|
|
|
|
|
+REM Function to copy files recursively, flattening directory structure
|
|
|
|
|
+call :CopyFilesFlat "%SOURCE_DIR%"
|
|
|
|
|
+
|
|
|
|
|
+echo.
|
|
|
|
|
+echo Copy operation completed!
|
|
|
|
|
+echo Files copied: %COPIED_COUNT%
|
|
|
|
|
+echo Files skipped: %SKIPPED_COUNT%
|
|
|
|
|
+
|
|
|
|
|
+goto :ContinueScript
|
|
|
|
|
+
|
|
|
|
|
+:CopyFilesFlat
|
|
|
|
|
+setlocal
|
|
|
|
|
+set "CURRENT_DIR=%~1"
|
|
|
|
|
+
|
|
|
|
|
+REM Process files in current directory
|
|
|
|
|
+for %%f in ("%CURRENT_DIR%\*") do (
|
|
|
|
|
+ if not "%%~nxf"=="" (
|
|
|
|
|
+ call :CopyFile "%%f"
|
|
|
|
|
+ )
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+REM Process subdirectories (excluding blacklisted ones)
|
|
|
|
|
+for /d %%d in ("%CURRENT_DIR%\*") do (
|
|
|
|
|
+ set "DIR_NAME=%%~nxd"
|
|
|
|
|
+ set "SKIP_DIR=0"
|
|
|
|
|
+
|
|
|
|
|
+ REM Check if directory should be excluded
|
|
|
|
|
+ if /i "!DIR_NAME!"==".vs" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"=="bin" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"=="obj" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"=="packages" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"=="TestResults" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"==".git" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"==".srcout" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"=="node_modules" set "SKIP_DIR=1"
|
|
|
|
|
+ if /i "!DIR_NAME!"==".nuget" set "SKIP_DIR=1"
|
|
|
|
|
+
|
|
|
|
|
+ if "!SKIP_DIR!"=="0" (
|
|
|
|
|
+ call :CopyFilesFlat "%%d"
|
|
|
|
|
+ )
|
|
|
|
|
+)
|
|
|
|
|
+endlocal
|
|
|
|
|
+goto :eof
|
|
|
|
|
+
|
|
|
|
|
+:CopyFile
|
|
|
|
|
+setlocal
|
|
|
|
|
+set "SOURCE_FILE=%~1"
|
|
|
|
|
+set "FILE_NAME=%~nx1"
|
|
|
|
|
+set "FILE_EXT=%~x1"
|
|
|
|
|
+set "SKIP_FILE=0"
|
|
|
|
|
+
|
|
|
|
|
+REM Check if file should be excluded
|
|
|
|
|
+if /i "%FILE_EXT%"==".user" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".suo" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".cache" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".tmp" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".temp" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".log" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".pdb" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".exe" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".dll" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".png" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".jpg" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".gif" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".ico" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".snk" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".vspscc" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".vssscc" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_EXT%"==".scc" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_NAME%"==".DS_Store" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_NAME%"=="Thumbs.db" set "SKIP_FILE=1"
|
|
|
|
|
+if /i "%FILE_NAME%"=="desktop.ini" set "SKIP_FILE=1"
|
|
|
|
|
+
|
|
|
|
|
+if "%SKIP_FILE%"=="0" (
|
|
|
|
|
+ REM Handle duplicate filenames by adding a counter
|
|
|
|
|
+ set "TARGET_FILE=%TARGET_DIR%\%FILE_NAME%"
|
|
|
|
|
+ set "COUNTER=1"
|
|
|
|
|
+
|
|
|
|
|
+ :CheckDuplicate
|
|
|
|
|
+ if exist "!TARGET_FILE!" (
|
|
|
|
|
+ set "BASE_NAME=%~n1"
|
|
|
|
|
+ set "TARGET_FILE=%TARGET_DIR%\!BASE_NAME!_!COUNTER!%FILE_EXT%"
|
|
|
|
|
+ set /a "COUNTER+=1"
|
|
|
|
|
+ goto :CheckDuplicate
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ copy "%SOURCE_FILE%" "!TARGET_FILE!" >nul 2>&1
|
|
|
|
|
+ if !ERRORLEVEL! EQU 0 (
|
|
|
|
|
+ set /a "COPIED_COUNT+=1"
|
|
|
|
|
+ echo Copied: %FILE_NAME%
|
|
|
|
|
+ ) else (
|
|
|
|
|
+ echo Failed to copy: %FILE_NAME%
|
|
|
|
|
+ )
|
|
|
|
|
+) else (
|
|
|
|
|
+ set /a "SKIPPED_COUNT+=1"
|
|
|
|
|
+)
|
|
|
|
|
+endlocal
|
|
|
|
|
+goto :eof
|
|
|
|
|
+
|
|
|
|
|
+:ContinueScript
|
|
|
|
|
+
|
|
|
|
|
+REM Count files copied
|
|
|
|
|
+echo.
|
|
|
|
|
+echo Counting files in .srcout directory...
|
|
|
|
|
+set "FINAL_COUNT=0"
|
|
|
|
|
+for /f %%i in ('dir "%TARGET_DIR%" /b /a-d 2^>nul ^| find /c /v ""') do set "FINAL_COUNT=%%i"
|
|
|
|
|
+
|
|
|
|
|
+echo.
|
|
|
|
|
+echo ====================================
|
|
|
|
|
+echo Copy Summary:
|
|
|
|
|
+echo ====================================
|
|
|
|
|
+echo Files copied: %FINAL_COUNT%
|
|
|
|
|
+echo Files processed: %COPIED_COUNT%
|
|
|
|
|
+echo Files skipped: %SKIPPED_COUNT%
|
|
|
|
|
+echo Source: %SOURCE_DIR%
|
|
|
|
|
+echo Target: %TARGET_DIR%
|
|
|
|
|
+echo.
|
|
|
|
|
+echo All files are copied to .srcout root directory (flattened structure)
|
|
|
|
|
+echo Excluded directories: .vs, bin, obj, packages, TestResults, .git, .srcout, node_modules, .nuget
|
|
|
|
|
+echo Excluded files: *.user, *.suo, *.cache, *.tmp, *.temp, *.log, *.pdb, *.exe, *.dll, and others
|
|
|
|
|
+echo ====================================
|
|
|
|
|
+
|
|
|
|
|
+REM Optional: Open target directory in Explorer
|
|
|
|
|
+set /p "OPEN_FOLDER=Open .srcout folder in Explorer? (y/n): "
|
|
|
|
|
+if /i "%OPEN_FOLDER%"=="y" (
|
|
|
|
|
+ explorer "%TARGET_DIR%"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+echo.
|
|
|
|
|
+echo Script completed. Press any key to exit...
|
|
|
|
|
+pause >nul
|