我解释张贴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