2017-10-11 198 views
0

我需要在批处理文件中处理多个参数。它可能是一个简单的参数,或者是一个带有参数和相关路径的复合参数。查找参数是否包含逗号分隔符,如果是,则将其拆分

格式的复合参数应该是这样的:""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

+0

好,现在,' “ARG = CUSTOM_SOURCE,SOURCE = C:\文件夹\ OtherFolder \ SourceFiles”'是第三个参数出四和在包围只有一组双引号而不是两个!当然你的HTML应用程序可以传递已经在逗号分隔的参数! – Compo

+0

参数数量不是这里的问题,在我的示例中,我将它设置为%1,因为没有其他参数。但我现在用双引号组来看这个问题。 –

+0

那么这取决于你如何定义“问题”,因为你的代码显然与第一个参数一起工作,'%1'预计会解析为'PARAM'。如果你的问题没有意义,或者你不仔细编辑它,它会混淆读者并阻碍潜在的解决方案。为什么你的HTML应用程序不能传递已经在逗号分隔的参数? – Compo

回答

0

的原因未能在传递的参数的双双引号。去除它们后,参数被正确处理:

set test=%3 
echo "%test%" rem output: ""ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles"" 

set test=%test:"=% 
echo "%test%" rem output: "ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles" 

:nextVar 
    for /F "tokens=1* delims=," %%a in ("%test%") do (
     set %%a 
     set test=%%b 
    ) 
if defined test goto nextVar 
echo ARG=%ARG%, SOURCE=%SOURCE% 
rem output: ARG=CUSTOM_SOURCE, SOURCE=C:\Folder\OtherFolder\SourceFiles 
相关问题