批处理文件:传递具有空格的参数以实现功能

Mat*_*ech 10 windows spaces batch-file

我正在使用批处理文件进行备份.我将选项传递给调用打包可执行文件的函数.除非参数包含空格,否则这种方法有效.这是相关代码:

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
Run Code Online (Sandbox Code Playgroud)

在XP(德语版)%DIRUSER%扩展到"Dokumente und Einstellungen"

在那种情况下,TARGET是正确的,但FILES =="Dokumente"和EXCLUDE =="und",这意味着脚本因%DIRUSER%中的空格而失败.

我怎样才能解决这个问题?

jeb*_*jeb 12

问题似乎是你分配变量的风格.
我想你将DIRUSER变量设置为与其他变量一样

set DIRUSER="Dokumente und Einstellungen"
Run Code Online (Sandbox Code Playgroud)

但是DIRUSER的内容就是这样"Dokumente und Einstellungen",所以引号是内容的一部分.

但随后SET FILES="%DIRUSER%\Eigene Dateien\*"扩展到SET FILES=""Dokumente und Einstellungen"\Eigene Dateien\*".

你可以使用扩展的风格set.
set "var=content" 这会将内容设置varcontent不带任何引号,也会忽略最后一个引号后面的所有附加空格.

所以你的代码就是

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   
Run Code Online (Sandbox Code Playgroud)