2016-04-07 16 views
0

私は各ディレクトリをループし、後で実行するpowershellスクリプトのコマンドを作成しようとしています。for-Loopは常に同じディレクトリを返します

@echo off 
del c:\temp\Pack*.log 

FOR /d %%d in (C:\dev\BlubDev\Releases\*.*) DO (
    set fullDir=%%d 
     set dirName=%fullDir:~24,100% 
    set tempLog=c:\temp\Pack%dirName%.log 
     set myvar=%%d\Tools\Build\BlubCreatePackageOnCentral.ps1 
     ECHO %myvar% ^> %tempLog% 
) 

しかし、なぜそれはいつも同じ(おそらく最後に見つかった)ディレクトリを印刷していますか?まさにこれが必要な理由

答えて

2

あなたは、delayed expansion

@echo off 

del c:\temp\Pack*.log 
setlocal enableDelayedExpansion 
FOR /d %%d in (C:\dev\BlubDev\Releases\*.*) DO (
    set fullDir=%%d 
     set dirName=!fullDir:~24,100! 
    set tempLog=c:\temp\Pack!dirName!.log 
     set myvar=%%d\Tools\Build\BlubCreatePackageOnCentral.ps1 
     ECHO !myvar! ^> !tempLog! 
) 
+0

あなたは説明できます必要がありますか? – Jannik

+1

@Jannik - それはリンクで説明されています。 '%something%'のような変数は、行が解析されると直ちに置き換えられます。バッチスクリプトは、大括弧で囲まれたブロックを1行の文として扱います。遅延拡張では、変数は実行の直前に(すなわち、解析と比較して遅れて)置き換えられ、新しい値が考慮される。 – npocmaka

+0

理解しています。私は理解しておらず、リンクもありませんでした。 – Jannik

関連する問題