3

この単一行の CMD ファイル TEST.CMD があります。

for %%f in (%1 %2 %3 %4 %5 %6 %7 %8) DO ECHO %%f

これを実行すると:

TEST this is a test

各パラメータを別々の行に正しくエコーします。つまり、

this
is
a
test

ただし、パラメータにアスタリスクが含まれている場合はスキップされます。例えば、

TEST this is a* test

結果:

this
is
test

アスタリスク付きのパラメータを通常のトークンのように扱うにはどうすればよいですか?

ありがとう。

4

3 に答える 3

1

ほとんどのパラメーターで機能する最も簡単な方法は、パラメーターを変数の "配列" に転送し、FOR /L を使用して配列をループすることです。これは、遅延拡張で最もよく達成されます。

この手法は、任意の数のパラメーターを処理できます。9 つに限定されません。

@echo off
setlocal

:: Transfer parameters to an "array"
set arg.cnt=1
:getArgs
(set arg.%arg.cnt%=%1)
if defined arg.%arg.cnt% (
  set /a arg.cnt+=1
  shift /1
  goto :getArgs
)
set /a arg.cnt-=1

:: Process the "array"
setlocal enableDelayedExpansion
for /l %%N in (1 1 %arg.cnt%) do echo arg %%N = !arg.%%N!
于 2012-11-29T06:30:23.947 に答える
0

事前にパラメーターを知らずに私が見つけた唯一の方法は、forループ内のパラメーターをエコーすることです

for /f %%f in ('"echo %1 && echo %2 && echo %3 && etc"') DO ECHO %%f
于 2012-11-28T16:46:42.963 に答える
0

それを印刷することはできません。アスタリスクは、FOR コマンドなどの一部のコマンドで「1 つ以上の文字」に一致する動的演算子です。唯一の方法は、コマンドの出力を取得する/Fパラメーターを使用することです。

これを使用するとどうなるか見てみましょう:

@Echo OFF

Pushd "C:\"

Call :sub a b c * d e

:sub
for %%f in (%1 %2 %3 %4 %5 %6 %7 %8) DO ECHO %%f
Pause&Exit

(FOR は、現在のディレクトリ内のすべてのファイルを出力します)

次に、行う必要があります...:

@Echo OFF

Call :sub a b c* d e

:sub
FOR /F "tokens=*" %%a in ('Echo %*') DO (ECHO %%a)
Pause&Exit
于 2012-11-28T17:23:23.663 に答える