[英]Batch echo command to file doesn't escape
我正在编写一个脚本来自动在新服务器上进行备份设置。 我不是批处理专家,因此它保持相当简单(请参阅此处完整以获取参考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 (
互联网上说,要使百分号变倍,使管道^ |-转义,等等。但是,如果我引用事物,完全使用转义符,似乎并没有改变任何内容-批处理不会听我说:(。帮助将不胜感激。
当您将百分号加倍时,您想在字面上回显%
并用^
转义所有其他特殊字符,则它应该起作用。
由于您不知道变量是否还包含特殊字符,因此最好在此处使用延迟扩展而不是百分比扩展。 这是可行的,因为通过延迟扩展来扩展所有内容都是安全的
setlocal EnabledDelayedExpansion
(
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 ^)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.