我希望使用批處理腳本將目錄中的所有CSV/TXT文件合併在一起,並希望你們能夠幫助 - 對於腳本編程來說很新穎,所以請原諒我,如果我要求解釋每條線都做什麼, 但是我確實發現了一些有用的東西,但是在測試時它仍然保持一個標題行。我希望它會合並所有文件 - 沒有標題。使用批處理合並不帶任何頭文件的CSV文件
供參考:
@echo off
setlocal enableextensions disabledelayedexpansion
rem configure paths
set "source=C:\Users\Khalid\Desktop\New_folder\p*.csv"
set "target=C:\Users\Khalid\Desktop\newfile.csv"
rem remove output file if needed
if exist "%target%" del "%target%" >nul 2>nul
rem search for header row
set "headerRow="
for %%f in ("%source%") do (
<"%%~ff" (for /l %%a in (1 1 10) do if not defined headerRow set /p
"headerRow=")
if defined headerRow goto haveHeader
)
:haveHeader
if not defined headerRow (
echo ERROR: impossible to get header row.
goto endProcess
)
rem output header to header file to use as filter.
rem header is cut to avoid findstr limitations on search strings
set "headerFile=%temp%\%~nx0_headerFile.tmp"
setlocal enableextensions enabledelayedexpansion
> "%headerFile%" echo(!headerRow:~0,125!
endlocal
rem search for input files with matching headers to join to final file
for /f "tokens=*" %%f in ('findstr /m /b /l /g:"%headerFile%" "%source%"') do (
if not exist "%target%" (
rem first file is directly copied
copy "%%~f" "%target%" /y > nul 2>nul
) else (
rem next files are filtered to exclude the header row
findstr /v /b /l /g:"%headerFile%" "%%~f" >> "%target%"
)
echo ... [%%~ff] joined to %target%
)
rem remove the temporary header file
del "%headerFile%" >nul 2>nul
:endProcess
endlocal
第二個工作對我來說更好,因爲腳本將需要閱讀超過1021個字符的文件。不過你說這是set/p的限制,爲什麼它還用在第二個腳本中?也感謝你的這個解決方案,並感謝你的其他人的輸入,非常感謝 –
@KhalidSheikh,限制不涉及文件大小,但行長。在第二個示例中,它用於至少檢索標題行的開頭,稍後將用作行匹配的非匹配開始行來放棄整行。 –
非常感謝您對整個答案的解釋 –