查找参数是否包含逗号分隔符,如果包含,请将其拆分

时间:2017-10-11 10:19:29

标签: batch-file cmd

我需要在批处理文件中处理几个参数。它可能是一个简单的参数,也可能是一个带有参数和相关路径的复合参数。

复合参数的格式应类似于:""ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles""

我无法弄清楚如何获取和设置ARG和SOURCE的值。

到目前为止我得到了什么:

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

1 个答案:

答案 0 :(得分: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
相关问题