簡體   English   中英

批處理回顯命令無法轉義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM