2011-07-13 15 views
8

Używam pliku wsadowego do tworzenia kopii zapasowych. Przekazuję opcje do funkcji wywołującej plik wykonywalny pakietu. Działa to, o ile parametry nie zawierają białych znaków. To jest odpowiedni kod:plik wsadowy: przekazać parametr z białymi znakami do funkcji

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 

Na XP (wersja niemiecka)% DIRUSER% rozszerza się do "dokumente und Preferencje"

W tym przypadku cel jest poprawne, ale pliki == "dokumente" i uwzględniają = = "und", co oznacza, że ​​skrypt nie działa z powodu białych znaków w% DIRUSER%.

Jak mogę to naprawić?

Odpowiedz

12

Problem wydaje się być Twój styl przypisywania zmiennych.
przypuszczam można ustawić zmienną DIRUSER jak pozostałe,

set DIRUSER="Dokumente und Einstellungen" 

lecz treść DIRUSER następnie "Dokumente und Einstellungen", więc cytaty są częścią zawartości.

Ale potem SET FILES="%DIRUSER%\Eigene Dateien\*" rozszerza się do .

Można użyć rozszerzonego stylu set.
set "var=content" Ustawia zawartość var na content bez żadnych cudzysłowów, a także wszystkie spacje znajdujące się za ostatnim cytatem są ignorowane.

Tak Twój kod będzie

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 
Powiązane problemy