4

cmd中的示例输入:

test.bat /p 1,3,4

预期结果:

1
3
4

到目前为止我的代码:

@echo off
set arg = %1
set var = %2
if (%1)==(/p) (
... need code that will read and print each character of var
)
4

3 回答 3

4

您的问题存在潜在问题。如果 test.bat 是:

@echo %1%

然后

test 1,2,3

印刷:

1

因为,在这种情况下,逗号被视为参数分隔符。

所以你要么需要用引号括起来:

test "1,2,3"

或者使用不同的内部分隔符:

test 1:2:3    

除非您希望将零件放置在 %2、%3 等中,在这种情况下,您的问题可以通过简单使用SHIFT.

对于我的解决方案,我选择在组参数“1,2,3”周围使用引号(尽管通过更改delims=,以指定要使用的字符,这很容易适应不同的分隔符)。

@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS

set args=%~2

if "%1"=="/p" (
:NextToken
    for /F "usebackq tokens=1* delims=," %%f in ('!args!') do (
        echo %%f
        set args=%%g
    )
    if defined args goto NextToken
)

像这样调用:

readch.bat /p "1,2,3"

%~2用于删除引号。

FOR语句解析 args,将第一个标记放入%f,将行的其余部分放入%g.

`goto NextToken' 行循环直到没有更多的标记。

于 2012-12-05T10:08:56.870 回答
3
@echo off
if "%1"=="/p" (
:LOOP
echo %2
shift
set arg=%2
if defined arg goto :LOOP else exit >nul
)
于 2012-12-05T09:22:05.800 回答
1
set params=%%~2
if (%1)==(/p) (
    set params=%params:,= %
)
if "%params%" NEQ "" (
  call :printer %params%
)
goto :eof

:printer
:shifting
if "%%1" NEQ "" (
  echo %%1
) else (
 goto :eof
)
shift
goto :shifting
goto :eof
于 2012-12-05T08:28:49.740 回答