使用批处理从单个字符串中获取两个参数?

Get two parameters out a single string using batch?

我正在尝试使用批处理脚本从单个字符串中获取两个参数。我想获取一个字符串,在本例中为 %%a,并根据放置逗号的位置(基本上以逗号分隔)将其分成两部分。因此,例如,值为 "Parameter1, Parameter2" 的单个字符串 %%a 将转换为两个单独的字符串 "Parameter1" 和 "Parameter2"。我将如何批量执行此操作?

for /f "delims=" %%a in (Text.txt) do (
echo %%a|find "#" >nul
if errorlevel 1 (

    for /f "delims=, tokens=1,2" %%x in (%%a) do (
        set "param1=%%x"
        set "param2=%%y"
    )

    echo Param1: %param1%
    echo Param2: %param2%
    echo.
)

第一个循环是忽略文本文件中包含 #.

的行

for 是要走的路:

for %%i in (%%a) do @echo %%i

根据您对 Aacinis 回答的评论和您编辑的问题进行了调整:

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type text.txt ^|find /v "#"') do (
    set count=0
    for %%i in (%%a) do (
        set /a count+=1
        set "param!count!=%%i"
    )
    echo --!param1!--!param2!--
    set param
)
echo the Parameters are %param1% and %param2%

我使用了另一种方法来消除包含 # 的行(少了括号)。如果有两个以上的参数,将自动生成额外的变量 (%param3%, %param4%,...)

for /F "delims=, tokens=1,2" %%x in ("%%a") do (
   set "part1=%%x"
   set "part2=%%y"
)

编辑:添加示例

@echo off
setlocal

for %%a in ("Parameter1,Parameter2") do (
   echo Value of percent-percent-a: %%~a

   for /F "delims=, tokens=1,2" %%x in ("%%~a") do (
      set "part1=%%x"
      set "part2=%%y"
   )

)

echo Part1: "%part1%"
echo Part2: "%part2%"

输出:

Value of percent-percent-a: Parameter1,Parameter2
Part1: "Parameter1"
Part2: "Parameter2"

第二次编辑

打扰一下;提前为这次编辑道歉,但我无法抗拒post它的诱惑...

当您post问题与任何编程语言相关时,尤其是在批处理文件的情况下,您应该非常清楚并描述真正的问题试图解决;否则,所提出的解决方案甚至可能 最差 比使用完整规范编写的任何其他不同代码。

例如,如果您的问题是:"I want to read a text file, ignoring lines that contain #, and get two comma delimited values into two separate variables",我会post编辑这个解决方案:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=, tokens=1,2" %%a in ('findstr /V "#" Text.txt') do (
   set "param1=%%a"
   set "param2=%%b"

   echo Param1: !param1!
   echo Param2: !param2!
   echo/
)

此外,当您报告 "errors in a solution" 时,您应该 非常小心 您报告的错误不是您自己引入的;否则,您只会打扰那些浪费时间试图免费为您提供解决方案的人! :(