2016-03-30 31 views
1

Komutumun çalışmasını sağlamada herhangi bir şans olmadan etrafı araştırdım. Oldukça yakın olduğumu hissediyorum, ama biraz yardıma ihtiyacım var. Ben "srcdir" (betiğimin başında belirledikten sonra) yinelemeli olarak taramak için bir FOR döngüsünü kullanmaya çalışıyorum, daha sonra döngü dosyaları/yolları (%% f) döndürdüğünde, dosya yolunun bir kısmını başka bir şeyle değiştirebilirim. (örneğin; C: \ rootpath \ des için C: \ rootpath \ src).Döngü ve değişken ikamesi için toplu olarak dosya yolunu bölme

Ben bu gibi bir komut dosyası kullanarak sadece böyle bir şey yapmak mümkün duyuyorum: bu zor kılan Ancak

set subdir=C:\rootpath\src 
set subdir=%subdir:src=des% 
echo %subdir% 

, benim "SRCDIRın" kök yolu değişebilir olmasıdır (örneğin; C : "rocpath" ve "srcdir" ifadesi değiştikten sonra her şey değişebilir (örneğin, C: \ rootpath \ src klasöründe "src"). Tek sabit yolu klasör src ve klasör des (yığın dosyamı çalıştırdığım aynı dizinde bulunur).

Yani, önceki örnekte aynı tekniği kullanarak, "srcdir" (%% f) içindeki dosyaların tam yolunu yinelemeli olarak bulmak için bir FOR döngüsünü kullanmak ve "src" klasörünü kullanarak yol dizesinde "des" klasörü. Bu nedenle, "%% f" yi bir değişken (subdir) olarak ayarlamaya ve değişken değiştirme kullanarak klasörleri değiştirmeye çalışıyorum. Herhangi bir yardım büyük takdir

set srcdir=C:\rootpath\src 
for /r "%srcdir%" %%f in (*.txt) do (
set subdir=%%f 
set subdir=%subdir:src=des% 
echo %subdir% 
) 

:

İşte benim şimdiki olmayan çalışma script! Teşekkürler! Eğer atama ve for döngü gibi bir kod bloğu içindeki değişkenler okuduğunuz beri

+0

[for' döngüsü] – aschipfl

+0

gibi bir kod bloğu içindeki değişkenleri ayarlayıp okuduğunuz anda [gecikmeli genişletme] (http://ss64.com/nt/delayedexpansion.html) gerekir. for döngüsü başlatılmadan önce 'Setlocal EnableDelayedExpansion' kullanılmalıdır? –

+0

Evet, bunu sağlar; Bunu kullanmak için, '% variable%' yerine '! variable! 'gibi değişkenleri genişletmeniz gerekir; Bu aynı zamanda alt-string ikame sözdizimi için de geçerlidir ... – aschipfl

cevap

2

Sen delayed expansion etkinleştirmeniz gerekir:

setlocal EnableDelayedExpansion 
set "srcdir=C:\rootpath\src" 
for /R "%srcdir%" %%F in ("*.txt") do (
    set "subdir=%%~fF" 
    set "subdir=!subdir:\src\=\des\!" 
    echo(!subdir! 
) 
endlocal 

setlocal EnableDelayedExpansion komut gecikmiş sağlayan genişleme; aynı zamanda çevreyi de belirler, bu da çevre değişkenlerindeki değişikliklerin sadece endlocal yürütülmeden veya toplu iş dosyasının sonlandırılmasından önce mümkün olduğu anlamına gelir.

Gecikmeli genişlemeyi kullanmak için, yüzde işaretlerini ünlem işareti ile değiştirmeniz gerekir, bu nedenle %subdir%!subdir! olur.

+0

Çok teşekkür ederim. Bu daha mantıklı. Komut dosyasını çalıştırarak gecikmeli genişlemeyi daha iyi anlayabildim. :) –