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 に答える