0

我正在尝试使用 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
4

2 回答 2

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**** 
)

让我知道。:)

于 2013-02-11T22:52:52.847 回答
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
于 2013-02-10T22:58:57.897 回答