使用批处理从单个字符串中获取两个参数?
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" 时,您应该 非常小心 您报告的错误不是您自己引入的;否则,您只会打扰那些浪费时间试图免费为您提供解决方案的人! :(
我正在尝试使用批处理脚本从单个字符串中获取两个参数。我想获取一个字符串,在本例中为 %%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" 时,您应该 非常小心 您报告的错误不是您自己引入的;否则,您只会打扰那些浪费时间试图免费为您提供解决方案的人! :(