11

1) 簡単な例:

set a="Hello"
set d="a"

では、変数 (の値) を使用して "a" の値を取得するにはどうすればよいdでしょうか。たとえば、ユーザーがプロンプトを使用して変数名を入力したり、変数名を関数に送信したりすることができます。

これらのアイデアはどれも機能しません:

set e=%%d%%

set e=%%%d%%%

set e=set e=%%d%%
%e%

1 時間のブレインストーミングとグーグル検索の後、私はこれを思いつきましたが、あまりにも複雑で不器用に思えます。他に/より簡単な方法は本当にありませんか?:

set a="Hello"
set b="Good day"
set c="Good night"

set /p d="Give me a variable name"

call :GetVarVal %%%d%%% "e"

REM This now gives the correct value:
echo %e%

goto :eof

:GetVarVal
  set "%~2=%~1"
goto :eof

2)また、似たようなものですが、これを行うためのより良い方法はありますか(理想的にはカスタム関数なしで):

set a="C:\Users\Blah\Documents\MP4Box\MP4Box.exe"

call :get_drive_and_path a

echo %b%

goto :eof

:get_drive_and_path
  set b=%~dp1
goto :eof

ありがとう!

4

4 に答える 4

15

なしの例delayed expansion(感嘆符を保持):

@echo off &setlocal
set "a=Hello!"
set "d=a"
call echo %%%d%%%

出力:

Hello!
于 2013-10-02T22:35:06.890 に答える
7

私があなたを正しく理解していれば、「遅延拡張」と呼ばれるトリックが機能するはずです。

SETLOCAL ENABLEDELAYEDEXPANSION
SET a=Hello
SET b=a
ECHO This is the value of a: !%b%!
SETLOCAL DISABLEDELAYEDEXPANSION

ここでどのように機能するかを確認してください

于 2013-10-02T21:45:31.280 に答える
0

それは簡単です:あなたが例えばタイプするように

SET VarName=VarValue

次に、SET 関数には、"VarName=VarValue" のような文字列が与えられます。そこでマークを使用するかどうかは関係ありません。次のコマンドは同じことを行います。

SET VarName=VarValue
SET "VarName=VarValue"

そのため、文字列を作成するために必要なツールを検討して、これを使用するというアイデアにたどり着きました。

SET "Name=VarName"
SET "%VarName%=VarValue"
Echo %Varname%

遅刻しないよりはいい - 楽しい時間を

于 2015-12-17T11:02:37.300 に答える