2013-02-10 30 views
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 

回答

0

您可以轻松添加ECHO命令以查看变量的值。这样你就可以确定他们是否设置正确与否。

无论如何,似乎在发布的脚本中有几个问题。

第一个是这条线:

SET PathString = C:\Users\bibhukdas\Documents\New_folder1~C:\Users\bibhukdas\Documents\New_folder 

aroung的=的空间是很重要的。赋值之前的那个变量名称的一部分和值的另一部分。因此,上面的行基本上创建了一个名为PathString 的变量,即具有尾随空格字符。要解决这个问题,只需删除两个空格。

另一个是for循环线。 delims选项后面跟着一个空格,该空格是无效的,并且会导致语法错误。再次,只是删除空间。

还有一个不同的问题。您不会忽略robocopy命令后面的source unavailable输出,这意味着尽管文件已被复制,您仍然可以在日志中获得source unavailable行。这应该很容易通过在robocopy行之后添加GOTO :EXIT命令来解决。但是,您也可以这样做:最后,您可以通过减少输出重定向的次数来提高脚本的可维护性。

重定向可以应用到命令的括号块,像这样:

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

保持我张贴。 :)