:: Takes two CSV files and combines them "side-by-side".
@echo off
if "%~2"=="" exit /b 1& if not "%~3"=="" exit /b 1
::
set outfile=".\%~n1_%~n2.csv"
set outfile_csv_delimiter=","
::
goto :main
:file_line_counter FileName VariableName
setlocal
for /f "delims=" %%I in (' find /v /c "" ^< "%~1" ') do (
set VAR=%%I
)
endlocal & set %2=%VAR%
goto :eof
:SUB Counter CsvFileName
setlocal
if "%~1" GTR "0" ( set skip="skip=%1") else ( set skip="")
for /f "tokens=1,* %SKIP:"=% delims=]" %%I in (' find /v /n "" ^< "%~2" ') do (
for %%K in (%%J) do (
set/p=%%K <NUL >>%TEMPFILE%
)
goto :break
)
:break
endlocal
goto :eof
:r_trim_once Char
setlocal EnableDelayedExpansion
call :get_string_length "%~1"
for /f "delims=" %%I in ('type "%OUTFILE:"=%"') do (
set line=%%I
if "!LINE:~-%STRING_LENGTH%!"=="%~1" set line=!LINE:~0,-%STRING_LENGTH%!
echo.!LINE!>>%TEMPFILE%
)
copy %TEMPFILE% "%OUTFILE:"=%" >NUL
del %TEMPFILE%
endlocal
goto :eof
:get_string_length String
setlocal
set VAR=%~1
set "len="
:loop_1133
if defined VAR (
set VAR=%VAR:~1%
set /a len+=1
goto :loop_1133
)
endlocal & set string_length=%LEN%
goto :eof
:remove_numeric_chars VariableName String
setlocal EnableDelayedExpansion
set VAR=%2
for /l %%I in (0,1,9) do ( set VAR=!VAR:%%I=!)
endlocal & set "%1=%VAR%"
goto :eof
:main
if exist "%OUTFILE:"=%" del "%OUTFILE:"=%"
set tempfile="%TEMP%\tmp%RANDOM%_%~nx0.txt"
call :file_line_counter "%~1" LEN_1
call :file_line_counter "%~2" LEN_2
if "%LEN_1%" GTR "%LEN_2%" ( set /a len=LEN_1) else ( set /a len=LEN_2)
set "len_1="& set "len_2="
call :remove_numeric_chars outfile_csv_delimiter "%OUTFILE_CSV_DELIMITER:"=%"
for /l %%C in (0,1,%LEN%) do (
call :SUB %%C "%~1"
call :SUB %%C "%~2"
if exist %TEMPFILE% (
for /f "usebackq delims=" %%F in (%TEMPFILE%) do (
for %%I in (%%F) do (
set/p=%%I%OUTFILE_CSV_DELIMITER:"=%<NUL >>"%OUTFILE:"=%"
)
echo.>>"%OUTFILE:"=%"
del %TEMPFILE%
)
)
)
call :r_trim_once %OUTFILE_CSV_DELIMITER%