@ECHO OFF
SETLOCAL
ECHO Set working directory
pushd %~dp0
ECHO Deleting existing combined file
del combined.csv
set "flag="
for %%i in (*.csv) do if %%i NEQ combined.csv (
IF DEFINED flag (
findstr /l /x /v /g:combined.csv "%%i">#.vsc
TYPE #.vsc >>combined.csv
) ELSE (
COPY "%%i" combined.csv >nul
SET flag=y
)
)
DEL #.vsc /F /Q
POPD
GOTO :EOF
這可能更適合你。
它使用一個簡單setlocal
而非delayedexpansion
版本,初始化flag
到空則環路內設置,並使用if defined
其上的flag
運行時價值的作品。
第一次通過,它簡單地複製所檢測到的源文件combined.csv
,然後設置flag
到值所以它的流定義彼此時間通過
,findstr
輸出源文件%%i
在這些行/v
做不/x
完全匹配/l
從字面上/g:filename
combined.txt
文件中的任何行我被提名爲#.vsc
(名稱不重要)的臨時文件。然後該文件被附加到combined.csv
因此,所提供的任何特定.csv
是自由的在其自身內重複的行,則combined.csv
也將是免費的重複行。
由於標題行在每個文件中顯然是相同的,因此第一個文件的起始copy
會將標題置於combined.csv
之後,因此findstr
將在此後整齊排除。
修訂,打擊邪惡的Unicode:
@ECHO OFF
SETLOCAL
ECHO Set working directory
pushd %~dp0
ECHO Deleting existing combined file
del combined.csv
set "flag="
for %%i in (*.csv) do if %%i NEQ combined.csv (
(FOR /f "delims=" %%j IN ('type "%%i"') DO ECHO %%j)>#.vsc
IF DEFINED flag (
findstr /l /x /v /g:combined.csv "#.vsc" >##.vsc
TYPE ##.vsc>>combined.csv
) ELSE (
REN #.vsc combined.csv
SET flag=y
)
)
DEL #.vsc /F /Q
DEL ##.vsc /F /Q
POPD
GOTO :EOF
我懷疑,這個問題是使用文件中UNICODE。剪切並粘貼數據表明它是unicode。
for /f...
儀式讀取unicode並生成ASCII,因此該版本首先使用您熟悉的技術簡單地轉換爲ASCII,然後對轉換後的文件#.vsc
進行操作。 findstr
不喜歡輸出到相同的文件,因爲它試圖讀取爲/g:
,因此findstr
輸出使用了另一個臨時文件##.vsc
。
請注意,(標題)Last modified
和date
以及其他地方之間的Unicode字符將被問號替換。
請閱讀整個[旅遊網頁](http://stackoverflow.com/tour)以及幫助主題[我如何提出一個好問題?](http://stackoverflow.com/help/how問),學習如何使用本網站! – aschipfl
你指的是標題行。如果是這樣,您可以刪除全部並在頂部添加一個標題行。 – 2016-10-10 13:30:10