对文件的批处理回送命令不会转义

时间:2014-01-10 08:47:36

标签: windows batch-file escaping echo

我正在编写一个脚本来自动化新服务器上的备份设置。我不是批量大师,所以它保持相当简单(参见完整的参考文献http://pastebin.com/D1zEP8dj)。一切都适用于我尝试将另一个批处理脚本写入文件的位置:

        (
        echo del "%BACKUP_SERVER%Snapshot-%%COMPUTERNAME%%\Week_before\*.*" /S /Q
        echo.
        echo move /Y "%BACKUP_SERVER%Snapshot-%%COMPUTERNAME%%\Full\*.*" "%BACKUP_SERVER%Snapshot-%%COMPUTERNAME%%\Week_before"
        echo move /Y C:\Scripts\Backup.log "%BACKUP_SERVER%Snapshot-%%COMPUTERNAME%%\Week_before"
        echo move /Y C:\Scripts\Backupdiff.log "%BACKUP_SERVER%Snapshot-%%COMPUTERNAME%%\Week_before"
        echo.
        echo.
        echo C:\Scripts\snapshot.exe C: "%BACKUP_SERVER%Snapshot-$computername\Full\$disk-Partition-$type.sna" --LogFile:C:\Scripts\Backup.log -L50000 -GX --usevss --AllWriters  
        echo @echo off
        echo    if %%errorlevel%% NEQ 0 (

        echo        echo Error while Backup at %%COMPUTERNAME%%.%%USERDOMAIN%%  ^| C:\Scripts\blat\blat.exe -server %BLAT_MAILSERVER%  -to info@abc.com -f backup@%BLAT_DOMAIN% -s "Error while Backup at %%COMPUTERNAME%%.%%USERDOMAIN%%" -attach C:\Scripts\Backup.log
        echo    )
        ) >full-backup.bat

    if %DO_DIFF_BACKUP%==y (
        (
            echo C:\Scripts\snapshot.exe C: %BACKUP_SERVER%\Snapshot-$computername\Diff\$disk-Partition-$type-$weekday.sna -h%BACKUP_SERVER%\Snapshot-$computername\Full\c-Partition-ful.hsh --LogFile:C:\Scripts\Backupdiff.log -L50000 -GX --usevss --AllWriters  
            echo @echo off
            echo    if %%%errorlevel%%% NEQ 0 (
            echo        echo Error while Backup at %%COMPUTERNAME%%.%%USERDOMAIN%%  ^| C:\Scripts\blat\blat.exe -server %BLAT_MAILSERVER%  -to info@abc.com -f backup@%BLAT_DOMAIN% -s "Error while Backup at %%COMPUTERNAME%%.%%USERDOMAIN%%" -attach C:\Scripts\Backupdiff.log
            echo    )
        ) >diff-backup.bat
    )

因此,在执行脚本时,它会在此摘录的最后一行停止。文件full-backup.bat完全不存在,但根本不会抛出错误,而文件diff-backup.bat是用以下内容编写的:

 C:\Scripts\snapshot.exe C: c:\test\Snapshot-$computername\Diff\$disk-Partition-$type-$weekday.sna -hc:\test\Snapshot-$computername\Full\c-Partition-ful.hsh -- LogFile:C:\Scripts\Backupdiff.log -L50000 -GX --usevss --AllWriters  
 @echo off
    if %0% NEQ 0 (

互联网说,为了逃避百分之一倍,他们逃脱管道^ | -them等等。但如果我引用东西,根本不使用逃生标志似乎没有改变任何东西 - 批次不会听我说: (。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果您想要按字面{@ 1}}回显百分号,并使用%转义所有其他特殊字符,那么它应该可以正常工作。

由于您无法知道您的变量是否也包含特殊字符,因此最好在此处使用延迟扩展而不是扩展百分比。 这适用于所有内容在通过延迟扩展进行扩展时是安全的

^