我正在使用批处理文件进行备份。我将选项传递给调用打包可执行文件的函数。除非参数包含空格,否则这种方法有效。这是相关的代码:
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”
在那种情况下TARGET是正确的,但FILES ==“Dokumente”和EXCLUDE ==“und”, 这意味着脚本因%DIRUSER%中的空格而失败。
我该如何解决这个问题?
答案 0 :(得分: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
答案 1 :(得分:3)
将功能从%~1
,%~2
和%~3
转换为%~f1
,%~f2
和%~f3
的arg调用应分别执行特技。它将传递每个arg的完全限定路径名。
更多信息:http://www.windowsitpro.com/article/server-management/how-do-i-pass-parameters-to-a-batch-file-