2016-04-07 20 views
0

döndürür Her dizinin üzerinde döngü çalışıyorum ve daha sonra yürüteceğim bir powershell betiği için bir komut oluşturmak için çalışıyorum.for-Loop her zaman aynı dir

@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% 
) 

Ancak neden her zaman aynı (belki de en son bulunan) dir yazdırılıyor? Tam olarak bu neden gerekli olduğunu

cevap

2

Sen 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

açıklayabilir gerek? – Jannik

+1

@Jannik - linkte açıklanmıştır. Satır ayrıştırıldığında,% '% bir şey%' gibi değişkenler derhal değiştirilir. Scripts, parantez bloklarını tek satırlık ifadeler olarak alır. Gecikmeli genişleme ile değişkenler, uygulamadan hemen önce (yani ayrıştırma ile karşılaştırıldığında gecikmiş) değiştirilir, böylece yeni değerler dikkate alınır. – npocmaka

+0

Tamam. Anladım. Anlamadım ve bağlantı ile. – Jannik

İlgili konular