2011-07-13 24 views
8

バックアップ用にバッチファイルを使用しています。私は、パッケージ実行可能ファイルを呼び出す関数にオプションを渡します。パラメータに空白が含まれていない限り、これは機能します。これは、関連するコードである:XP(ドイツ語版)にバッチファイル:関数に空白を含むパラメータを渡します。

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 

%のDIRUSER%はその場合対象は "DokumenteウントEinstellungen" に

展開=正しいが、FILES == "Dokumente" とEXCLUDE = "und"、 これは、%DIRUSER%の空白のためにスクリプトが失敗することを意味します。

どうすればこの問題を解決できますか?

答えて

12

問題は変数を割り当てるあなたのスタイルのようです。
私はあなたが他のもの

set DIRUSER="Dokumente und Einstellungen" 

ようDIRUSER変数を設定します。しかし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 
関連する問題