您可以轻松添加 ECHO 命令以查看变量的值。这样您就可以确定它们是否设置正确。
无论如何,发布的脚本中似乎确实存在一些问题。
第一个是这一行:
SET PathString = C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder
周围的空间=
很重要。赋值之前的一个成为变量名的一部分,另一个成为值的一部分。因此,上面的行本质上创建了一个名为 的变量PathString
,即带有尾随空格字符。要解决此问题,只需删除两个空格。
另一种是for
循环线。该delims
选项后跟一个空格,该空格无效,会导致语法错误。同样,只需删除空间。
还有一个不同类型的问题。您不会source unavailable
在命令之后省略输出robocopy
,这意味着source unavailable
尽管文件已被复制,但您仍会在日志中获得该行。这应该可以通过在该行GOTO :EXIT
之后添加一个命令来轻松解决。robocopy
但是,您也可以这样做:
if "%Source1%" == "0" (
echo *****source unavailable******* >>C:\Users\bibhukdas\Documents\New_folder\log.txt
) else (
robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1 >> C:\Users\bibhukdas\Documents\New_folder\log.txt
)
最后,您可以通过减少输出重定向的数量来提高脚本的可维护性。
重定向可以应用于括号中的命令块,如下所示:
(
command1
command2
command3
...
) >outputfile
因此,您可以通过这种方式将重定向应用于C:\Users\bibhukdas\Documents\New_folder\log.txt
所有需要它的命令:
(
echo ******start****
echo ******POINT1****
echo "%PathString%"
for /f "tokens=1,2 delims=~" %%a in("%PathString%") do set Source1=%%a&set Destination1=%%b
echo ******POINT1****
if "%Source1%" == "0" (
echo *****source unavailable*******
) else (
robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1
)
) >>C:\Users\bibhukdas\Documents\New_folder\log.txt
但是请注意,for
循环必须移到块外。这是因为它设置了稍后%
在同一块中评估(使用扩展)的变量,这不能按预期工作。这是括号块的效果之一。您可以在此处使用延迟扩展,但在这种特殊情况下,将分配移到块外要容易得多。
因此,在解决了所有提到的问题之后,您的脚本可能如下所示:
@echo off
SET PathString=C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder
for /f "tokens=1,2 delims=~" %%a in("%PathString%") do set Source1=%%a&set Destination1=%%b
(
echo ******start****
echo ******POINT1****
echo "%PathString%"
echo ******POINT1****
if "%Source1%" == "0" (
echo *****source unavailable*******
) else (
robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1
)
) >>C:\Users\bibhukdas\Documents\New_folder\log.txt