我需要在批处理文件中处理几个参数。它可能是一个简单的参数,也可能是一个带有参数和相关路径的复合参数。
复合参数的格式应类似于:""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
答案 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