2010-10-03 14 views
6

, başka senaryoyu arayarak ve ona gördüğünüz gibi dize parametresi script hangi klasörün adını içeren.bat geçerli klasör adı benim yarasa komut dosyasında

cscript log.vbs "triggered from folder <foldername> by Eric" 

bir dize parametresi geçirerek aranmak. Bunu aktarmanın doğru yolu, bu klasör adını dinamik olarak komut dosyasına eklemektir?

cevap

18

sen Gittiğiniz o dizini istiyorsanız, %cd% o alabilirsiniz. Bu senin şu andaki çalışma rehberin.

set startdir=%cd% 

sonra siz ne olursa olsun herhangi bir değişiklik kodunuzda %startdir% kullanabilirsiniz:

Eğer değişen komut yürütme sırasında geçerli çalışma dizini, sadece başında kaydetmek olmaya gidiyoruz Açık ( %cd%'u etkiler).

 
    @setlocal enableextensions enabledelayedexpansion 
    @echo off 
    set startdir=%cd% 
    set temp=%startdir% 
    set folder= 
:loop 
    if not "x%temp:~-1%"=="x\" (
     set folder=!temp:~-1!!folder! 
     set temp=!temp:~0,-1! 
     goto :loop 
    ) 
    echo.startdir = %startdir% 
    echo.folder = %folder% 
    endlocal && set folder=%folder% 

Bu çıkışlar:


sadece (Yorumlarınız göre) o yolun son bileşeni elde etmek istiyorsanız, temel olarak aşağıdaki kullanabilirsiniz

 
    C:\Documents and Settings\Pax> testprog.cmd 
    startdir = C:\Documents and Settings\Pax 
    folder = Pax 

\ ayırıcıyı bulana kadar, karakterleri tam yolun sonundan birer birer kopyalayarak çalışır. Oldukça ya da pratik değildi, ama

Aslında son bileşen adı almak için basit ve çok etkili bir yöntem olduğu DÜZENLEME

:-) Windows toplu programlama nadiren.

for %%F in ("%cd%") do set "folder=%~nxF" 

değil bu durum için bir sorun, ancak ya \ ile sona olmayabilir yolu içeren değişken ile ilgileniyor, o zaman \.

for %%F in ("%pathVar%\.") do set "folder=%~nxF" 
+1

@Berming, size yolun son bileşenini verecek kodu ekledim. Güncellemeye bakın. – paxdiablo

+0

Sadece ihtiyacım olan şey, çok teşekkür ederim. Endlocal iken "klasör" değişkenine bundan sonra erişemediğimi fark ettim, bu yüzden bu çizgiyi çıkardım. Bu çizgiyi kaldırdığımdan beri, '@setlocal enableextensions enabledelayedexpansion '' i de kaldırmalıyım, fakat bu satırın kaldırılması sorunlara neden oldu, ben de onu sakladım. – Berming

+2

@Berming, güncellemeye bakın. Endlocal'ı bırakırsanız, daha sonra sizi etkileyecektir.Gecikmeli genişletmenin çalıştığından emin olmak için 'setlocal/endlocal' işlevini kullanabilirsiniz, ancak' endocal' ile 'endlocal && set folder =% folder%' arasında değişiklik yaparak '' folder' değişkeninin çıkmasını sağlayabilirsiniz. – paxdiablo

8
+1

ekleyerek doğru sonucu garanti edemez Bu, betiğin çağrıldığı yerden olabileceği ya da olmayabilen yarasa komut dosyasının saklandığı klasörü gösterir, bu yüzden benim durumumda çalışmaz, çünkü hemen hemen her zaman farklı olan farklı bir yerden çağrılır. komut dosyasının gerçekte depolandığı yer. – Berming

+1

Doğru! Afedersiniz. Tamam, bu cevabı burada referans olarak bırakacağım - birisi belirli amaçlar için yararlı% ~ dp0'yi bulabilir. – Isaac

İlgili konular