@echo off setlocal enabledelayedexpansion set "sourcePath=%1" set "outputFile=CombinedCSVs.csv" set "logFile=CombineCSVs_log.txt" set "tempFile=temp.csv" rem Clear existing log file echo Combine CSV Files Log > "%logFile%" echo Started at %date% %time% >> "%logFile%" if not exist "%sourcePath%" ( echo Error: Source directory does not exist. echo Error: Source directory does not exist. >> "%logFile%" goto :eof ) echo Processing CSV files... echo Processing CSV files... >> "%logFile%" rem Count total number of CSV files set /a totalFiles=0 for /r "%sourcePath%" %%F in (*.csv) do set /a totalFiles+=1 echo Found %totalFiles% CSV files to process. echo Found %totalFiles% CSV files to process. >> "%logFile%" rem Write headers from the first CSV file set /a processedFiles=0 for /r "%sourcePath%" %%F in (*.csv) do ( set "firstFile=%%F" goto :writeHeaders ) :writeHeaders if defined firstFile ( echo Writing headers from %firstFile% echo Writing headers from %firstFile% >> "%logFile%" copy "!firstFile!" "%outputFile%" > nul set /a processedFiles+=1 ) else ( echo No CSV files found. echo No CSV files found. >> "%logFile%" goto :eof ) rem Append data from all CSV files (skipping headers) for /r "%sourcePath%" %%F in (*.csv) do ( if not "%%F"=="!firstFile!" ( echo Processing %%F echo Processing %%F >> "%logFile%" rem Use findstr to skip the header and append to temp file findstr /v /b /c:"" "%%F" >> "%tempFile%" set /a processedFiles+=1 echo Processed !processedFiles! out of %totalFiles% files. ) ) rem Append temp file to output file and delete temp file type "%tempFile%" >> "%outputFile%" del "%tempFile%" echo All CSV files processed. echo All CSV files processed. >> "%logFile%" echo CSV files combined into %outputFile% echo CSV files combined into %outputFile% >> "%logFile%" echo Finished at %date% %time% >> "%logFile%" echo Process completed. Check %logFile% for details. echo Press any key to exit... pause > nul