【问题标题】:batch file: pass parameter with white spaces to function批处理文件:将带有空格的参数传递给函数
【发布时间】:2011-10-04 20:11:16
【问题描述】:

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

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% 中的空格而失败。

我该如何解决这个问题?

【问题讨论】:

    标签: windows batch-file spaces


    【解决方案1】:

    问题似乎在于您分配变量的方式。
    我想您像其他变量一样设置 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   
    

    【讨论】:

      【解决方案2】:

      将函数中的 arg 调用从 %~1%~2%~3 分别切换到 %~f1%~f2%~f3 应该可以解决问题。它将传递每个 arg 的完全限定路径名。

      更多信息:http://www.windowsitpro.com/article/server-management/how-do-i-pass-parameters-to-a-batch-file-

      【讨论】:

        猜你喜欢
        • 2018-08-11
        • 2011-09-07
        • 1970-01-01
        • 2016-07-03
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多