bat dosyasında mevcut dizin işlemleri


bat mevcut dizin
Bir Microsoft çalışanı aynen şunu demişti : geçenlerde bulduğumuz 200+ satırlık bir C# kodunun yaptığı işi 90 byte lık bir .bat (batch) dosyası ile kolaylıkla yapabilirsiniz , işte bazen script dilleri

işlerimizi okadar kolaylaştırırki programlama ile uğraşılacağına birkaç satırlık script yazmak çok daha pratiktir , bu arada bu yazdığım size abartı geldiyse kaynağı burada , .bat dosyalarında bazen mevcut dizinin mutlaka buldurulması gereklidir , şöyle bir senaryo düşünelim :

1. Masaüstümüzde ac.bat diye bir dosyamız (1) ve buldum isminde bir klasörümüz olsun (2) , bu klasörün içerisindede open.txt ve run.bat dosyaları yeralsın

bat mevcut dizini

2. gelin bu dosyaların içerisinde yeralan kodlarını da yazalım
ac.bat : start C:\Users\velociraptor\Desktop\buldum\run.bat
run.bat : start open.txt
Open.txt : www.sordum.net

Açıklarsak , ac bat ile buldum klasörünün içerisindeki start.bat ı çalıştırıyoruz run.bat ta open.txt dosyasını açıyor.

Mavcut dizin (Current directory) kullanma ihtiyacı

ilk mevcut dizin kullanma ihtiyacımız ac.bat içeriğinde ortaya çıkıyor çünkü ac.bat ı bu haliyle bir arkadaşımıza yollasak kullanamayacaktır , kullanabilmesi için içeriğindeki velociraptor kullanıcı ismini kendininkiyle değiştirmesi gerekecektir , O halde bize öyle bir kod gerekli ki herkeste editlemeye gerek bırakmadan çalışsın işte bu kod mevcut dizin kodudur , örneğimizdeki kodu düzenlerlersek aşağıdaki şekli alacaktır
%~dp0 = C:\Users\velociraptor\Desktop

start %~dp0\buldum\run.bat
start %~dp0buldum\run.bat

Örneğimizden devam edelim , ben buldum klasörünün içerisindeki run.bat ı çift tıklarsam open.txt dosyasını açmaktadır (Yani olması gerektiği gibi çalışıyor) fakat ac.bat ı çalıştırdığımda bulunamadı hatası vermektedir (Aşağıda)

bat bulunamaı hatası

işte tam bu noktada tekrar mevcut dizin (current directory) kodu kullanma ihtiyacımız ortaya çıkıyor eğer Buldum klasörünün içerisinde yeralan run.bat dosyası içindeki kodu aşağıdaki gibi düzenlersek hata vermeden çalıştığını görürüz

start %~dp0\open.txt
start %~dp0open.txt

Mevcut dizin gibi faydalı başka kısayollar varmıdır derseniz Örneğimize sadık kalarak birkaç tanesini verelim = den sonraki kısım mavi kodun vereceği sonucu temsil etmektedir:

%~dp0  = C:\Users\velociraptor\Desktop\buldum\
%cd% = C:\Users\velociraptor\Desktop\buldum
%0 = "C:\Users\velociraptor\Desktop\buldum\run.bat"
%~d0 = C:
%~p0 = \Users\velociraptor\Desktop\buldum\
%~n0 = run
%~x0 = .bat
%~t0 = 14.07.2016 17:33
%~z0 = 2

%cd% Aşğıdaki şekilde de kullanılabilir

set mypath=%cd%
@echo %mypath%

Aşağıdaki kod sadece içinde bulunulan klasör ismini verecektir , örneğimizde "buldum"

for %%* in (.) do set CurrDirName=%%~nx*
echo %CurrDirName%

.bat dosyası Admin olarak çalıştırıldığında dosya bulunamadı hatası

aynı örneğimizi şu şekilde değiştirelim buldum klasörünün içerisinde del.bat (del sil.txt) , sil.txt dosyaları olsun del.bat çift tıklayıp çalıştırıldığında sil.txt i silmesine rağmen sağ tıklayıp yönetici olarak çalıştırıldığında dosya bulunamadı hatası vermeketedir

bat admin bulunamadi

Çünkü resimdede görüldüğü üzere Admin olarak çalışan Cmd system32 den çalıştığı için sil.txt i orada aramaktadır ,  bu sebeple onun mevcut dizinde işlem yapmasını sağlamak için içerisindeki kodun başına küçük bir ilave yapmamız gerekmektedir oda  "cd /d %~dp0" kodudur böylece mevcut dizinde işlem yapacaktır

cd /d %~dp0
del sil.txt

Görüldüğü gibi mevcut dizin kodları birçok durumda gerekli olmakta hatta bazen kullanılmadığında kodlar çalışamamaktadır.


Bir Yorum Var
  1. Avatar for şevket

Yorum Ekle

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Captcha