gpt4 book ai didi

windows - 批处理文件 : pass parameter with white spaces to function

转载 作者:可可西里 更新时间:2023-11-01 12:41:09 27 4
gpt4 key购买 nike

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

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

我该如何解决这个问题?

最佳答案

问题似乎出在您分配变量的方式上。
我想您像设置其他变量一样设置 DIRUSER 变量

set DIRUSER="Dokumente und Einstellungen"

但是 DIRUSER 的内容是 "Dokumente und Einstellungen",因此引号是内容的一部分。

但是 SET FILES="%DIRUSER%\Eigene Dateien\*" 扩展为 SET FILES=""Dokumente und Einstellungen"\Eigene Dateien\*"

您可以使用 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

关于windows - 批处理文件 : pass parameter with white spaces to function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com