0

いくつかの引数を取り、その後に 1 つ以上のオプションのファイル名 (ワイルドカードを含む場合があります) が続き、ある時点でオプションのファイル名のそれぞれを処理するバッチ ファイルを作成しようとしていますが、forコマンドはそれらを展開しようとし続けます。それらを印刷するだけでは機能しません。

ヘルプ ( for /?) を確認しましたが、これを防止するスイッチはないようです。一重引用符、二重引用符、逆引用符、および を使用してみまし/fたが、何も機能しないようです。

次のコマンドは、期待どおりに機能します。

> for %i in (foo bar baz) do @echo %i
foo
bar
baz

次のコマンドは、次のことを行いません。

> for %i in (foo bar baz really?) do @echo %i
foo
bar
baz

以下は、それほどではありません。

> ren > reallyz
The syntax of the command is incorrect.

> dir /b really*
reallyz

> for %i in (foo bar baz really?) do @echo %i
foo
bar
baz
reallyz

渡されたリストを文字列として扱い、ファイル名のワイルドカードとして解釈しようとしない Windows コマンド インタープリターを取得する方法はありますか?

4

1 に答える 1

3

いいえ - 単純な FOR コマンドは常に*および?ワイルドカード文字を展開します。

必要なことを行うには、GOTO ループを使用する必要があります。SHIFT コマンドを使用すると、すべてのパラメーターにアクセスできます。

@echo off
:argLoop
if "%~1" neq "" (
  echo %1
  shift /1
  goto :argLoop
)

ほとんどの場合、引数をさらに処理してから、それらを印刷するだけです。通常、後で使用するために変数の「配列」に格納します。

@echo off
setlocal

set argCnt=1
:argLoop
if "%~1" neq "" (
  set "arg.%argCnt%=%~1"
  set /a argCnt+=1
  shift /1
  goto :argLoop
)
set /a argCnt-=1

:: Show Args
setlocal enableDelayedExpansion
for /l %%N in (1 1 %argCnt%) do echo arg.%%N = !arg.%%N!
于 2013-02-04T21:55:33.633 に答える