2017-08-30 8 views
2

私はテストのためにforループを使用しようとします。パラメータがバッチファイルで可変である場合、どのようにパラメータフォームのラベルを取得できますか?

@echo off 

@for /F "delims=" %%i in ('dir /b /a:d ') do (
    call :AAA 
    echo def %def% 
    if "%def%" == "123" (echo yes) else (echo no) 
) 

:AAA 
set "abc=123" 
set "def=%abc%" 
echo AAA %def% 

実行結果:

AAA 123 
def 
no 
AAA 123 
def 
no 
AAA 123 
def 
no 
AAA 123 
def 
no 
AAA 123 

私はDEFパラメータのフォームラベルの変数を取得したいです。 しかし、それはラベルから変数を取得しません。

パラメータが変数を定義する場合、ラベルからパラメータを取得する方法は?

+0

あなたが投稿した内容は、用途や目的がないため、答える価値はありません。あなたが本物の仕事を私たちに伝えたいのであれば、その反応に対する動機づけが増えるでしょう。 – Compo

+0

私はバッチファイルのスクリプトを書いています。これらのコードはスクリプトの一部です。私はここに完全に投稿することはできません。だから私は単純な例のためだけです。それを編集するように歓迎します。 :) – betty

答えて

0

2つの単純なバグがあります。
最初に、ループの後にexit /bを忘れた場合、ループが終了した後で:AAAブロックが1回余分に実行されます。

コードブロックが実行される前に、ブロックが解析されたときにパーセント拡張が発生するため、ブロック内でのパーセント拡張の使用は機能しません。
ここでは遅延拡張が必要です。

@echo off 
setlocal EnableDelayedExpansion 

for /F "delims=" %%i in ('dir /b /a:d ') do (
    call :AAA 
    echo def !def! 
    if "!def!" == "123" (echo yes) else (echo no) 
) 
EXIT /B 

:AAA 
set "abc=123" 
set "def=%abc%" 
echo AAA %def% 
+0

ソリューションをありがとう、それは動作します。それらのコードのためにスクリプトの一部です。私はここに完全に投稿することはできません。だから私は単純な例のためだけです。 'exit/b'を思い出させてくれてありがとう。 – betty

関連する問題