windows - batch file: pass parameter med hvide rum til at fungere

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger en batchfil til sikkerhedskopier. Jeg overfører valgmulighederne til en funktion, der kalder pakken kørebar. Dette virker, medmindre parametrene indeholder hvide rum. Dette er den relevante kode:


SET TARGET="\%SAVEDIR\%XP.User.Documents.rar"
SET FILES="\%DIRUSER\%Eigene Dateien*"      
SET EXLUCDE="\%DIRUSER\%DocumentsCDs" 
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


På XP (tysk version) udvides\% DIRUSER\% til 'Dokumente und Einstellungen'


I så fald er TARGET korrekt, men FILES == 'Dokumente' og EXCLUDE == 'und',
hvilket betyder at scriptet fejler på grund af hvide rum i\% DIRUSER\%.


Hvordan kan jeg løse dette?

Bedste reference


Problemet synes at være din stil til at tildele variablerne.

Jeg formoder, at du angiver DIRUSER-variablen som de andre


set DIRUSER="Dokumente und Einstellungen"


Men indholdet af DIRUSER er så "Dokumente und Einstellungen", så citaterne er en del af indholdet.


Men så udvides SET FILES="\%DIRUSER\%Eigene Dateien*" til SET FILES=""Dokumente und Einstellungen"Eigene Dateien*".


Du kan bruge den udvidede stil på set.

set "var=content"
Dette sætter indholdet af var til content uden nogen citater, og også alle tilføjede mellemrum bag det sidste citat ignoreres.


Så din kode ville være


set "SAVEDIR=D:ackup"
set "diruser=Dokumente und Einstellungen"
SET "TARGET=\%SAVEDIR\%XP.User.Documents.rar"
SET "FILES=\%DIRUSER\%Eigene Dateien*"      
SET "EXLUCDE=\%DIRUSER\%DocumentsCDs" 
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   

Andre referencer 1


Hvis du skifter dine argopkald i funktionen fra henholdsvis \%~1, \%~2 og \%~3 til \%~f1, \%~f2 og \%~f3, skal du gøre det. Det vil sende det fuldt kvalificerede stinavn for hver arg.


Mere info: http://www.windowsitpro.com/article/server-management/how-do-i-pass-parameters-to-a-batch-file-[17]