Batch file 如何将文件从列表复制到计算机?
我尝试将文件从特定的网络位置复制到列表中的许多计算机,并在复制之前检查目标是否存在 这是用于公司的手动更新软件文件。它已经过测试并运行,但需要微调Batch file 如何将文件从列表复制到计算机?,batch-file,copy,Batch File,Copy,我尝试将文件从特定的网络位置复制到列表中的许多计算机,并在复制之前检查目标是否存在 这是用于公司的手动更新软件文件。它已经过测试并运行,但需要微调 For /F "usebackq tokens=*" %%a in ("C:\Test\PCList.txt") Do ( IF Exist "\\%%a\%Target32%" (robocopy "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%
For /F "usebackq tokens=*" %%a in ("C:\Test\PCList.txt") Do (
IF Exist "\\%%a\%Target32%" (robocopy "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
) Else IF Exist "\\%%a\%Target64%" (robocopy "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
) Else END
)
我希望找到一个目标,但我想检查这两个目标是否都存在,是否也存在副本。我建议作为代码:
for /F "usebackq delims=" %%a in ("C:\Test\PCList.txt") do (
if exist "\\%%a\%Target32%" %SystemRoot%\System32\robocopy.exe "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
if exist "\\%%a\%Target64%" %SystemRoot%\System32\robocopy.exe "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
)
我希望环境变量Target32
和Target64
在末尾用反斜杠定义,以真正测试目录的存在性,并将source32
和source64
中的文件复制到目录中
顺便说一句:您的代码带有不必要的ELSE END
结果不在错误消息中存在的两个目录中:
“END”未被识别为内部或外部命令,可操作的程序或批处理文件 我还建议使用日志文件名
%date:~10,4%-%date:~7,2%\uu%date:~4,2%。使用-
记录日志,而不是在年和月之间以及月和日之间记录
。一个文件名中应该只有一个点,即文件扩展名中的一个点,尽管一个文件名中可能有多个点
如果在目标计算机上找不到以下两个目录,此代码也会记录:
if not "%Target32:~-1%" == "\" set "Target32=%Target32%\"
if not "%Target64:~-1%" == "\" set "Target64=%Target64%\"
for /F "usebackq delims=" %%a in ("C:\Test\PCList.txt") do (
set "Copied="
if exist "\\%%a\%Target32%" set "Copied=1" & %SystemRoot%\System32\robocopy.exe "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
if exist "\\%%a\%Target64%" set "Copied=1" & %SystemRoot%\System32\robocopy.exe "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
if not defined Copied echo Nothing copied to %%a.>"%logdir%\%%a_err_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
)
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
获取/?
如果/?
robocopy/?
设置/?
我建议作为代码:
for /F "usebackq delims=" %%a in ("C:\Test\PCList.txt") do (
if exist "\\%%a\%Target32%" %SystemRoot%\System32\robocopy.exe "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
if exist "\\%%a\%Target64%" %SystemRoot%\System32\robocopy.exe "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%.%date:~7,2%.%date:~4,2%.log"
)
我希望环境变量Target32
和Target64
在末尾用反斜杠定义,以真正测试目录的存在性,并将source32
和source64
中的文件复制到目录中
顺便说一句:您的代码带有不必要的ELSE END
结果不在错误消息中存在的两个目录中:
“END”未被识别为内部或外部命令,
可操作的程序或批处理文件
我还建议使用日志文件名%date:~10,4%-%date:~7,2%\uu%date:~4,2%。使用-
记录日志,而不是在年和月之间以及月和日之间记录
。一个文件名中应该只有一个点,即文件扩展名中的一个点,尽管一个文件名中可能有多个点
如果在目标计算机上找不到以下两个目录,此代码也会记录:
if not "%Target32:~-1%" == "\" set "Target32=%Target32%\"
if not "%Target64:~-1%" == "\" set "Target64=%Target64%\"
for /F "usebackq delims=" %%a in ("C:\Test\PCList.txt") do (
set "Copied="
if exist "\\%%a\%Target32%" set "Copied=1" & %SystemRoot%\System32\robocopy.exe "%source32%" "\\%%a\%Target32%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x86_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
if exist "\\%%a\%Target64%" set "Copied=1" & %SystemRoot%\System32\robocopy.exe "%source64%" "\\%%a\%Target64%" /tbd /s /is /ndl /nfl /log+:"%logdir%\%%a_x64_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
if not defined Copied echo Nothing copied to %%a.>"%logdir%\%%a_err_%date:~10,4%-%date:~7,2%-%date:~4,2%.log"
)
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
获取/?
如果/?
robocopy/?
设置/?