0

私はDOS CMDスクリプトでこれをやろうとしています:

@setlocal
@for /L %%X in (1,1,10) do @call :label1 %%X
@endlocal
@exit /b

:label1
@set I=%1
@set /P A%I%=SET A%I% to?
@echo You entered %%A%%I%%
exit /b

ただし、実際に入力された値をエコーすることはできません。エコーラインですべてのバリエーションを試しました。

誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

1

出力を取得するには、 を使用できますcall echo You entered %%A%I%%%

ただし、 & や | などの特殊文字が 問題を引き起こすことはありません:echo You entered !A%I%!

遅延展開を使用するには、 で有効にする必要がありますsetlocal enableDelayedExpansion

役に立つヒント 1 -@echo offスクリプトの先頭に置きます。@その後、次のコマンドで使用する必要はありません。

役立つヒント 2 - SET /P を使用する前に、既存の変数値を明示的にクリアする必要があります。まだ定義されていないことを確認することはできません。<Enter>ユーザーが何も入力せずに単に押すと、既存の値が保持されます。

I役に立つヒント 3 -変数さえ必要ありません。%1どこにいても、パラメータを簡単に使用できます%I%

役立つヒント 4 - さらに良いことに、サブルーチンを呼び出す必要さえありません。

@echo off
setlocal enableDelayedExpansion
for /L %%X in (1,1,10) do (
  set "A%%X="
  set /P "A%%X=SET A%%X to? "
  echo You entered !A%%X!
)
endlocal
于 2012-05-09T16:18:46.360 に答える