我需要在批处理文件中处理多个参数。它可能是一个简单的参数,或者是一个带有参数和相关路径的复合参数。查找参数是否包含逗号分隔符,如果是,则将其拆分
格式的复合参数应该是这样的:""ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles""
我无法弄清楚如何获取和设置ARG和源值。
到目前为止,我已经得到了什么:
setlocal enableextensions enabledelayedexpansion
set sep=","
set str1=%3
if not "x!str1:%sep%=!"=="x%str1%" (
echo found pattern rem gets here with no problem
echo 3 is %3 rem output: string is "ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles"
set sourceString=%3
echo "%sourceString%" rem output: ""
REM extract source path from argument
:nextVar
for /F "tokens=1* delims=," %%a in ("%3") do (
set %%a
echo "%%a" REM output: "ARG CUSTOM_SOURCE SOURCE C:\Folder\OtherFolder\SourceFiles"
set sourceString=%%b
echo "%%b" "sourceString" REM output: "" ""
)
if defined sourceString goto nextVar
echo "%ARGS%" "%SOURCE%" REM output: "" ""
)
代码分裂源字符串我从这个答案了:https://stackoverflow.com/a/18821153/6385702。
尝试了其他选项,但没有任何工作到目前为止。似乎,我有set var=string
部分的主要问题。即使使用enabledelayedexpansion
,我也会得到空值。
我不太流利的批处理文件,真的与这一堆叠。我在这里错过了什么?
编辑: 参数从HTA应用程序传递(并且也可以从命令提示直接被传递) 格式如下:cmd /k myBatch.cmd PARAM REQ_PARAM "ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles" OPTIONAL_PARAM
好,现在,' “ARG = CUSTOM_SOURCE,SOURCE = C:\文件夹\ OtherFolder \ SourceFiles”'是第三个参数出四和在包围只有一组双引号而不是两个!当然你的HTML应用程序可以传递已经在逗号分隔的参数! – Compo
参数数量不是这里的问题,在我的示例中,我将它设置为%1,因为没有其他参数。但我现在用双引号组来看这个问题。 –
那么这取决于你如何定义“问题”,因为你的代码显然与第一个参数一起工作,'%1'预计会解析为'PARAM'。如果你的问题没有意义,或者你不仔细编辑它,它会混淆读者并阻碍潜在的解决方案。为什么你的HTML应用程序不能传递已经在逗号分隔的参数? – Compo