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/?
  • 设置/?