2011-07-13 55 views
8

我正在使用批處理文件進行備份。我將選項傳遞給調用打包可執行文件的函數。這工作,除非參數包含空格。這是相關代碼:批處理文件:使用空格傳遞參數以運行

SET TARGET="%SAVEDIR%\XP.User.Documents.rar" 
SET FILES="%DIRUSER%\Eigene Dateien\*"  
SET EXLUCDE="%DIRUSER%\Documents\CDs" 
call:funcBackup %TARGET% %FILES% %EXLUCDE% 

:funcBackup 
    SET TARGET=%~1 
    SET FILES=%~2 
    SET EXCLUDE=%~3  
    echo."%PACKER% a -r -x"%EXCLUDE%" "%TARGET%" "%FILES%"" 
    ::call %PACKER% a -r -x"%EXCLUDE%" "%TARGET%" "%FILES%" 
goto:eof 

在XP(德語版本)%DIRUSER%擴展爲 「Dokumente UND Einstellungen」

在這種情況下,目標是正確的,但FILES == 「Dokumente」 和排除= =「und」, 這意味着腳本因%DIRUSER%中的空白而失敗。

我該如何解決這個問題?

回答

12

這個問題似乎是你的分配變量的風格。
我想你設置DIRUSER變量像其他的

set DIRUSER="Dokumente und Einstellungen" 

但DIRUSER的含量則"Dokumente und Einstellungen",所以引號是內容的一部分。

但是SET FILES="%DIRUSER%\Eigene Dateien\*"擴展爲SET FILES=""Dokumente und Einstellungen"\Eigene Dateien\*"

您可以使用set的擴展樣式。
set "var=content" 這會將var的內容設置爲content而不帶任何引號,並且最後引號後面的所有附加空格都將被忽略。

所以,你的代碼將

set "SAVEDIR=D:\backup" 
set "diruser=Dokumente und Einstellungen" 
SET "TARGET=%SAVEDIR%\XP.User.Documents.rar" 
SET "FILES=%DIRUSER%\Eigene Dateien\*"  
SET "EXLUCDE=%DIRUSER%\Documents\CDs" 
call:funcBackup "%TARGET%" "%FILES%" "%EXLUCDE%" 
goto :eof 

:funcBackup 
    SET "TARGET=%~1" 
    SET "FILES=%~2" 
    SET "EXCLUDE=%~3" 
    echo."%PACKER% a -r -x"%EXCLUDE%" "%TARGET%" "%FILES%" 
    ::call %PACKER% a 
goto :eof 
相關問題