0

変数を設定する「 VAR.bat 」というファイルがあります。

SET VARa=C:\Program Files
SET VARb=C:\Program Files (x86)
set VARc=C:\ProgramData

変数名だけを含む「 SET.set 」という別のファイルがあります。

VARa
VARb
VARc

次のようなルーチンからセットを呼び出したいと思います。

 for /f "tokens=* delims= " %%a in ('type "SET.set"') do (
    SET CONSA=%%~a
    SET CONSN=%%^%%a%%
    CALL :CREATEVAR
    )
    :CREATEVAR
    if exist "%CONSN%" CALL :%CONSA%_detect
    exit /b

:VARa_detect
echo "%CONSN%"
exit /b

:VARb_detect
echo "%CONSN%"
exit /b

:VARc_detect
echo "%CONSN%"
exit /b

コマンド プロセッサは値を " C:\Program Files " ではなく " %VARa% " と解釈するため、 ^を使用して値に%をエスケープして追加することはできません。

4

1 に答える 1

3

ここで遅延拡張を使用できます。

setlocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('type "SET.set"') do (
    SET CONSA=%%~a
    SET CONSN=!%%~a!
    CALL :CREATEVAR
)

または、同じ行で、次のように追加のexpaqnsionを使用できますCALL

...
call set CONSN=%%%%~a%%
于 2012-08-09T09:19:23.247 に答える