我正在尝试使用robocopy将文件从一个文件夹复制到另一个文件夹,但我不认为源和目标设置正确。真的很感激这方面的帮助。
@echo off
SET PathString = C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder
echo ******start**** >>C:\Users\bibhukdas\Documents\New_folder\log.txt
echo ******POINT1**** >>C:\Users\bibhukdas\Documents\New_folder\log.txt
echo "%PathString%" >>C:\Users\bibhukdas\Documents\New_folder\log.txt
for /f "tokens=1,2 delims =~" %%a in("%PathString%") do set Source1=%%a&set Destination1=%%b
echo ******POINT1**** >>C:\Users\bibhukdas\Documents\New_folder\log.txt
if "%Source1%" == "0" goto NOSOURCE1
robocopy.exe %Source1% %Destination1% *.doc /COPY:DAT /MINAGE:5 /R:1 >> C:\Users\bibhukdas\Documents\New_folder\log.txt
:NOSOURCE1
echo *****source unavailable******* >>C:\Users\bibhukdas\Documents\New_folder\log.txt
:EXIT
答案 0 :(得分:0)
您可以轻松添加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
答案 1 :(得分:0)
我对您的代码的要点做了一些修改。 我认为现在应该可行了
@echo off
SET "PathString=C:\Users\bibhukdas\Documents\New_folder1,C:\Users\bibhukdas\Documents\New_folder"
set "delim=,"
echo ******start****
echo ******POINT1****
echo "%PathString%"
for /f "tokens=1,2 delims=," %%a in (`echo %PathString%`) do (
echo "%%a"
echo "%%b"
echo ******POINT1****
)
让我发布。 :)