| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- @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
|