【问题标题】:Robocopy kept adding backslash in Windows 7 batch scriptRobocopy 不断在 Windows 7 批处理脚本中添加反斜杠
【发布时间】:2018-06-07 20:21:42
【问题描述】:

在 Windows 7 pro 上尝试使用以下批处理脚本复制单个文件时,我遇到了一个额外的反斜杠:

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"


set "DATESTAMP=%YYYY%%MM%%DD%" & set "TIMESTAMP=%HH%%Min%%Sec%"
set "FULLSTAMP=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"

set BACKUP_FILE=Backup_%FULLSTAMP%
set LOCAL_BACKUP_PATH=c:\Backup\%DATESTAMP%

set REMOTE_BACKUP_PATH=X:\Backup\%DATESTAMP%

set FULL_LOCAL_BACKUP_FILE=%LOCAL_BACKUP_PATH%\%BACKUP_FILE%.zip

set FULL_REMOTE_BACKUP_FILE=%REMOTE_BACKUP_PATH%\%BACKUP_FILE%.zip

if NOT EXIST "C:\Backup\%DATESTAMP%" ( md C:\Backup\%DATESTAMP% )
"C:\Program Files\7-Zip\7z" a -tzip "%LOCAL_BACKUP_PATH%\%BACKUP_FILE%.zip" "C:\Backup\Images.db" "C:\Backup\Images.log" >> C:\Backup\blog.txt 

if NOT EXIST "%REMOTE_BACKUP_PATH%" ( md "%REMOTE_BACKUP_PATH%" )

robocopy %FULL_LOCAL_BACKUP_FILE% %FULL_REMOTE_BACKUP_FILE% /S /E /COPY:DATS /PURGE /MIR /w:1 >> C:\Backup\blog.txt

不幸的是,robocopy.exe 不断附加一个额外的反斜杠“\”,导致它自己无法找到源文件或目标文件,如下所示:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Wed Dec 27 17:36:49 2017

   Source : c:\Backup\20171227\Backup_2017-12-27_17-36-49.zip\
     Dest : X:\Backup\20171227\Backup_2017-12-27_17-36-49.zip\

    Files : *.*

  Options : *.* /S /E /COPY:DATS /PURGE /MIR /R:1000000 /W:1 

------------------------------------------------------------------------------

2017/12/27 17:36:49 ERROR 2 (0x00000002) Accessing Source Directory c:\Backup\20171227\Backup_2017-12-27_17-36-49.zip'`\
The system cannot find the file specified.

Robocopy 似乎尝试复制源目录和目标目录,而不是文件。

简而言之,如何删除出现在源和目标中的额外反斜杠?另外,如何让 robocopy 只复制文件?

我查了很多类似的搜索结果却没有找到答案。

提前致谢,

乔治

【问题讨论】:

  • 我想知道为什么你同时拥有/s/e。它们是冲突的。

标签: batch-file windows-7 robocopy


【解决方案1】:

ROBOCOPY应该在这里用来复制单个文件

C:\Backup\20171227\Backup_2017-12-27_17-36-49.zip

到同名目录X:\Backup\20171227\

ROBOCOPY 将反斜杠附加到 sourcedestination 因为 ROBOCOPY 旨在复制多个文件并期望source 是一个目录,而 destination 也是一个目录。在命令提示符窗口robocopy /? 中运行并至少阅读输出帮助的顶部。

由于某些未知的原因,这里还使用了选项/S 复制所有子目录,不包括空目录,/E 复制所有子目录,包括空子目录。在这种冲突场景中,使用/S /E 毫无意义,并且 ROBOCOPY 会忽略选项/S。另外/PURGE/MIR 对复制单个文件没有意义。

批处理文件可以优化为:

@echo off
for /F "tokens=2 delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "dt=%%I"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "DATESTAMP=%YYYY%%MM%%DD%"
set "FULLSTAMP=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"

set "BACKUP_FILE=Backup_%FULLSTAMP%.zip"
set "LOCAL_BACKUP_PATH=C:\Backup\%DATESTAMP%"
set "REMOTE_BACKUP_PATH=X:\Backup\%DATESTAMP%"

md "C:\Backup\%DATESTAMP%" 2>nul
"%ProgramFiles%\7-Zip\7z.exe" a -tzip "%LOCAL_BACKUP_PATH%\%BACKUP_FILE%" "C:\Backup\Images.db" "C:\Backup\Images.log" >>C:\Backup\blog.txt

%SystemRoot%\System32\robocopy.exe "%LOCAL_BACKUP_PATH%" "%REMOTE_BACKUP_PATH%" "%BACKUP_FILE%" /COPY:DATS /w:1 >>C:\Backup\blog.txt

ROBOCOPY 由带有 source 目录、destination 目录、要复制的单个文件和两个附加参数的批处理文件执行这对复制单个文件很有意义。

目标目录X:\Backup\20171227\ROBOCOPY自动创建,因此之前不得手动创建。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • md /?
  • robocopy /?
  • set /?
  • wmic /?
  • wmic os /?
  • wmic os get /?
  • wmic os get localdatetime /?

另请阅读有关 Using Command Redirection Operators 的 Microsoft 文章。

【讨论】:

    【解决方案2】:

    感谢您提供的详细信息,我已使用以下代码:

    @echo off
    for /F "tokens=2 delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "dt=%%I"
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
    
    set "DATESTAMP=%YYYY%%MM%%DD%"
    set "FULLSTAMP=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
    
    set "BACKUP_FILE=Backup_%FULLSTAMP%.zip"
    set "LOCAL_BACKUP_PATH=C:\Backup\%DATESTAMP%"
    set "REMOTE_BACKUP_PATH=X:\Backup\%DATESTAMP%"
    
    md "C:\Backup\%DATESTAMP%" 2>nul
    "%ProgramFiles%\7-Zip\7z.exe" a -tzip "%LOCAL_BACKUP_PATH%\%BACKUP_FILE%" "C:\Backup\Images.db" "C:\Backup\Images.log" >> C:\Backup\blog.txt
    
    %SystemRoot%\System32\robocopy.exe "%LOCAL_BACKUP_PATH%" "%REMOTE_BACKUP_PATH%" "%BACKUP_FILE%" /COPY:DATS /w:1 >> C:\Backup\blog.txt
    

    下面是批量输出:

    ROBOCOPY     ::     Robust File Copy for windows                              
    -------------------------------------------------------------------------------
    
      Started : Thu Dec 28 11:07:51 2017
    
       Source : C:\Backup\20171228\
         Dest : X:\Backup\20171228\
    
        Files : Backup_2017-12-28_11-07-18.zip
    
      Options : /COPY:DATS /R:1000000 /W:1 
    
    ------------------------------------------------------------------------------
    
          New Dir          1    C:\Backup\20171228\
            New File         375.5 m    Backup_2017-12-28_11-07-18.zip   0.0%...............................................................................................................................100%  
    ------------------------------------------------------------------------------------------------------------------------
                   Total    Copied   Skipped  Mismatch    FAILED    Extras
        Dirs :         1         1         0         0         0         0
       Files :         1         1         0         0         0         0
       Bytes :  375.52 m  375.52 m         0         0         0         0
       Times :   0:00:33   0:00:33                       0:00:00   0:00:00
       Speed :            11793404 Bytes/sec.
       Speed :             674.824 MegaBytes/min.
       Ended : Thu Dec 28 11:08:24 2017
    

    干杯, 乔治

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-25
      • 2018-04-13
      • 1970-01-01
      • 2014-06-13
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多