我解釋張貼Aacini對整批產品代碼的命令行中使用的方法:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceFile=source.txt"
set "DeleteFile=toDelete.txt"
set "DestinationDirectory=%SystemRoot%\Deployment\"
for /F %%I in ('%SystemRoot%\System32\xcopy.exe "%SourceFile%" "%DestinationDirectory%" /C /D /Q /Y 2^>nul') do set "CopiedFilesCount=%%I"
if %CopiedFilesCount% GTR 0 del "%DeleteFile%"
rem Add here more command lines using one of the 3 environment variables define above.
endlocal
首先,它是在複製一個文件與XCOPY非常重要目標目錄路徑以反斜槓結尾,否則XCOPY會提示目標是目錄還是文件。
XCOPY這裏使用的總輸出處理STDOUT作爲最後一行在甚至已經開始被複制與文件數量的信息消息時沒有被複制或時發生錯誤。
命令FOR在背景單獨的命令處理執行XCOPY捕獲這個輸出處理STDOUT和逐行處理它。
使用此處使用的默認選項忽略以分號開頭的空行和行,並且沒有eol=
選項。其他行的處理方式是將每行分割爲由空格或水平製表符分隔的字符串,因爲沒有delims=
選項,所以使用此處使用的默認分隔符。由於沒有使用tokens=
選項,因此每行的第一個空格/製表符分隔的字符串被分配給循環變量I
,該行的其餘部分將被忽略。
循環變量I
的當前值在每條處理線上分配給環境變量CopiedFilesCount
替換其以前的值。
第一空間/製表符分隔的上最後一行輸出串由XCOPY是複製的文件的數目是在這裏複製只是一個單一文件或者0
或1
。因此,最後在FOR循環執行完成後,環境變量CopiedFilesCount
的值爲0
或1
。
值與GREATER THAN操作員命令相比IF以確定該文件是在這種情況下,其他文件被刪除複製。
爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。
del /?
echo /?
endlocal /?
for /?
if /?
rem /?
set /?
setlocal /?
'for/F %% a in('xcopy'%SOURCEFILE%「」%DESTDIR%「/ c/d/q/y')do set」files = %% a「'and'if %files%gtr 0 echo文件已更新' – Aacini
@Aacini完美無缺。我從來沒有完全理解FOR的批處理,但是效果很好。謝謝 – EcksMedia