私は自分のバッチファイルを書き込んで、npmのバージョンを(ちょうど楽しみのために)切り替えようとしています。バッチファイルでネストされた変数の抽象化を使用するにはどうすればよいですか?
@echo off
for /f "delims=" %%i in ('npm -v') do set output=%%i
move "%NPM_PATH%" "%NPM_PATH%-%output%"
FOR %%A IN (%*) DO (
IF "%%A"=="--change" (
SETLOCAL EnableDelayedExpansion
SET /A c=1
ECHO "ID : VERSION"
ECHO -------------------------
FOR /F "tokens=*" %%F in ('dir /on /b /a:d /p "%NPM_DIR%"') DO (
ECHO !c! : %%F
SET dir_!c!=%%F
SET /a c=c+1
)
set /p id="enter version ID: (e.g. !dir_1! enter 1):"
set target_dir= "dir_!id!"
echo !target_dir!
)
)
抽象化したい正しい変数をエコーアウトできます。
しかし、実際に!target_dir!
の値を出力するにはどうすればよいですか?
例:
ユーザが画面にdir_1
を印刷する1
echo !target_dir!
を選択します。
しかし、私は次のecho !dir_1!
を使用すると、npm-4.0.0
が印刷されます。
ユーザーが1
を入力したときに、どのように出力するのですか?npm-4.0.0
変更この行: '設定をtarget_dir ='これにより、 "dir_ ID!": 'call set target_dir =" %% dir_!id!%% "'またはこれを以下に示します: 'for %% i in(!id!)do set target_dir ="!dir _ %% i! "';第2のものが好ましいものである。 [この質問](http://stackoverflow.com/questions/40096886/how-to-use-delayed-variable-expansion-to-reference-a-variable-from-a-string/)を参照してください。 – Aacini
これは私の質問に対する答えです。 – TheRealMrCrowley
私はスペースを削除しなければならなかったが、%% iのための '%!i(!id!)do set target_dir =!dir _ %% i!' – TheRealMrCrowley