Windows 文件的批处理回显命令不';逃脱不了
我正在编写一个脚本,以便在新服务器上自动进行备份设置。我不是批处理专家,因此它保持相当简单(请参阅此处的完整部分以供参考)。在我尝试将另一个批处理脚本写入文件时,一切正常:Windows 文件的批处理回显命令不';逃脱不了,windows,batch-file,escaping,echo,Windows,Batch File,Escaping,Echo,我正在编写一个脚本,以便在新服务器上自动进行备份设置。我不是批处理专家,因此它保持相当简单(请参阅此处的完整部分以供参考)。在我尝试将另一个批处理脚本写入文件时,一切正常: ( echo del "%BACKUP_SERVER%Snapshot-%%COMPUTERNAME%%\Week_before\*.*" /S /Q echo. echo move /Y "%BACKUP_SERVER%Snapshot-%%COMPUTERN
(
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 (
互联网上说,“逃逸百分比翻倍”、“逃逸管道”^ |等等。但是,如果我引用一些东西,使用逃逸标志,似乎没有任何改变——batch不会听我说:(.任何帮助都将不胜感激。当您将要按字面上的
%
进行回显的百分号加倍,并用^
转义所有其他特殊字符时,应该可以使用
由于您不知道变量是否也包含特殊字符,因此最好在此处使用延迟展开,而不是百分比展开。
这是因为当通过延迟扩展进行扩展时,所有内容都是安全的
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 ^)
)
echo)
将关闭您的代码块,因此您也需要将其转义echo^)
刚刚尝试过,结果与之前相同。尽管如此,你是对的,我怎么能看不到呢?%%%errorlevel%%
应该是%%errorlevel%%
,最后一个括号应该被删除。你的脚本中有更多的错误,例如如果“%REPEAT\u DOWNLOAD%”==“y”
永远不会是真的,请查看延迟扩展
。很多变量都不起作用,如果没有延迟扩展
,则无法设置变量并在同一代码块中使用它。此外,在定义变量之前,可以使用变量“%CONFIRM\u BACKUP\u CONF%”
。您应该修改代码,稍后再回来。虽然脚本现在似乎在输出文件中的文本,但“BACKUP_SERVER”变量将不会替换为前面定义的字符串。是否添加setlocal EnableDelayedExpansion
行?是否获得!备份服务器代码>作为文本还是空文本?在块之前添加set BACKUP\u SERVER=TEST
时会发生什么?