Vbs ile komut istemi yada bat komutlarını çalıştıralım


Vbs içerisinde bat veya cmd kodu çalıştırmak
Visual basic script dili (vbs) ile windows işletim sisteminde birçok şey yapmak mümkündür gel gelelim bazen tek satırlık bir bat komutu vbs deki karmaşık kodlamanın yerini alabilir , elbetteki script dillerini

kullanırken bazen birinin sağladığı kolaylıktan faydalanmak için kodlarını diğerinin içerisinde kullanmak oldukça avantaj sağlayabiliyor , mesela vbs de çevre değişkenlerini kullanmaya kalkarsanız ilave kodlar kullanmak zorundasınızdır Burada oysa mesela aşağıdaki kodu bat dosyası olarak kaydedersek anında “C:\Users\{username}\AppData\Roaming” kısmını açacaktır

start %APPDATA%

peki vbs de uzun uzadıya kod yazığ çevre değişkeni tanımlamaktansa direkt bu .bat kodlarını kullansak ne olur ? oldukça güzel olur hem bat kodları çalışırken ilk önce siyah bir ekran beliriyor komut yürütülüyor ve saniyelik bir hızla komut penceresi kapanıyor vbs de istersek bu siyah ekranının görünmemesini de sağlayabiliriz nasılını Burada açıklamıştık. üsteki bat komutlarını vbs ile uygulamaya kalkarsak aşağıdaki gibi olacaktır

Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /k start %APPDATA%" , 1 , True
Set oShell = Nothing

Birileri diyecektirki ee ben neden üstteki tek satırla yaptığım işin aynsını vbs de 3 satırla yapayım ? işte işin püf noktası da tam olarak burada:

VBS içerisinden .bat komutları çalıştırmanın avantajları

1. Cmd de bazen neyaparsak yapalım anlık görünüp kaybolan o pencereyi engeleyemeyiz oysa vbs bize bu imkanı sunmaktadır

2. Bazı bat komutları mutlaka üzerlerine tıklayınca yönetici olarak çalıştır demeyi gerektirir , oysa vbs ile bu engelde kolayca aşılabilir

3. Bat kodları Kullanıcı ile diyalog için farkı diyalog pencereleri sunmazken vbs de tıklamak için buton girilecek boşluk seçim ekranı… gibi kolaylıklar vardır.

En üstteki örneğimizden devam edelim evet vbs ile bat kodu çalıştırdık ama cmd penceresi açık kaldı

cmd penceresi açık kaldı

O halde vbs içinde bat kullanmanın ilk faydası olan cmd penceresini görünmez yapalım bunun için aşağıdaki kodları kullanabiliriz

Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /k start %APPDATA%" , 0 , True
Set oShell = Nothing

Üstteki kodlar kullanıldığında karşımıza asla bir cmd penceresi gelmeden bat kodunu uygulamış olduk. gelelim 2. maddede sözedilen faydasına ben Boot sürem hızlansın diye açılış dosyalarımı defrag ettirmek istesem bat dosyasına aşağıdaki kodları yazarım

cmd /k defrag c: -b

lakin aşağıdaki resimde de gördüğünüz gibi benden illada yönetici yetkisi istiyor , bu bat dosyasını acemi bir kullanıcıya yollasam tıklasa çalışmıyor diyecektir

cmd yönetici yetkisi istiyor

İkinci maddede belirttiğimiz faydası burada ortaya çıkıyor kodları aşağıdaki şekilde düzenlersek ve buradaki şekilde yönetici olarak çalıştırma kodlarını eklersek içerisinde Cmd yi admin yetkilerinde çalıştırıp komutu uygulamış oluruz

Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd /k defrag c: -b" ,1 , true

üstte bahsettiğimiz üçüncü faydaya gelirsek ; kullanıcıya mesela istediği isimde bir klasör oluşturtalım ve klasör ismini kullanıcı kendisi girsin bunu şık bir biçimde uygulayabilmek için vbs içerisinden bat kodu çalıştırabiliriz bunun için aşağıdaki kodları kullanacağız

DIM objShell
set objShell = wscript.createObject("wscript.shell")

foldername = inputbox ("Klasör ismi giriniz: ")
iReturn = objShell.Run("CMD /C md " & foldername & chr(34), 1 , True)

Kodları vbs haline getirip çalıştırdığımızda aşağıdaki gibi kullanıcının istediği ismi yazabileceği bir pencere gelecek ve isim yazıldıktan sonra “Tamam” butonuna basıldığında klasör oluşacaktır.

vbs içinden bat kodu ile klasör oluşturma

Örnekler çoğaltılabilir fakat işin temel mantığı her iki script dilinin kolaylıklarından faydalanıp Hibrit diye tabir edilen kodlama yapmaktır buda bize her iki script dilinin kolaylıklarını birarada kullanma imkanı vermektedir.


4 Yorum Var

Yorum Ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Captcha