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
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
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)
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
Çü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.
Merhaba çok güzel elinize sağlık , bu konularda web de çokta bilgi yok. keşke % ne demek %% ne demek, önüne ~ koyunca ne oluyor, neden dd veya d veya d0 olunca ne oluyor, d1 olsa ne olur gibi, konunun özünü anlatsaydınız.