Bazen bilgisayar ortamında halletmeniz gereken basit ancak çokluğu nedeniyle insanı üşendiren bir durumla karşılaşabilirsiniz. Bu durumda genelde bilgisayar programı yazarız. Kullanabileceğimiz bir çok dil var ancak bu editörleri açmak bazen sıkıcı oluyor, bazende fazlaca vakit alıyor. Ayırca yeni birşeyler eklemek için tekrardan açıp derlemek işkenceye dönüşüyor.
ADF (automatik document feeder – otomatik döküman besleyici) ile taramış olduğum bir sürü evrak için dosya isimlendirmesi yapmam gerekiyordu. Evraklar arkalı önlüydü. Bu nedenle bir yüzünü taradığımda sayfa numaraları 1-3-5 şeklinde giderken sırasını bozmadan kağıtları çevirip tekrar cihaza koyduğımda sayfa numaraları tersten 12-10-8 gibi ilerliyordu. Total Commander ile bu şekilde bir numaralandırma yapmak imkansızdı. Elimin altında bulunan Delphi ve VS C# bu iş için biraz büyük kalacaktı. Bende Excel ve Word içinde bol bol kullandığımızdan VBS ile yapmaya karar verdim.
Tek numaraları sıralayan kod aşağıda:
Dim fso, folder, files, NewsFile,sFolder Set fso = CreateObject("Scripting.FileSystemObject") currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName))) sFolder = currentDirectory Set folder = fso.GetFolder(sFolder) Set files = folder.Files Set sFiles = CreateObject("System.Collections.ArrayList") For each folderIdx In files If Right(folderIdx.Name, 3) = "JPG" then sFiles.Add folderIdx.Name End If Next SFiles.Sort() iSayac = 1 Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True) for each file in sFiles sYeniIsim = sFolder & "Sayfa-" & String(3 - Len(Cstr(iSayac)), "0") & Cstr(iSayac) & ".JPG" iSayac = iSayac + 2 NewFile.WriteLine(sYeniIsim & " " & file) fso.MoveFile sFolder & file, sYeniIsim Next NewFile.Close
Tersten giden çift numaralar için ise:
Dim fso, folder, files, NewsFile,sFolder Set fso = CreateObject("Scripting.FileSystemObject") currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName))) sFolder = currentDirectory Set folder = fso.GetFolder(sFolder) Set files = folder.Files Set sFiles = CreateObject("System.Collections.ArrayList") For each folderIdx In files If Right(folderIdx.Name, 3) = "JPG" then sFiles.Add folderIdx.Name End If Next SFiles.Sort() SFiles.Reverse() iSayac = 2 Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True) for each file in sFiles sYeniIsim = sFolder & "Sayfa-" & String(3 - Len(Cstr(iSayac)), "0") & Cstr(iSayac) & ".JPG" iSayac = iSayac + 2 NewFile.WriteLine(sYeniIsim & " " & file) fso.MoveFile sFolder & file, sYeniIsim Next NewFile.Close
Bu kodların çalışabilmesi için sisteminizde .Net Framework kurulu olması gerekiyor. Çünkü Set sFiles = CreateObject(“System.Collections.ArrayList” komutu ile oluşturmuş olduğum sFiles nesnesi .net içinde yer alıyor.Bunu yapma nedenim dosya isimlerini sıralamak istememdi. Sıfırdan bir metin sıralama fonksiyonu yazmak yerine SFiles.Sort() komutunu kullanmak daha kolay geldi. Metin listesini tersten sıralamak içinse SFiles.Sort() komutundan sonra SFiles.Reverse() komutunu kullanmak yeterli.
iSayac değişkeninin başlangıç değerini değiştirerek istediğiniz rakamdan başlamasını sağlayabilirsiniz.
Kodlarda görebileceğiniz NewFile nesnesi FileList.txt dosyasına dosyaların yeni adlarını ve eski adlarını kaydetmektedir. Böylece bir yanlışlık olduğunda geri gönebilmemizi sağlayacaktır.
Bu kodları bir metin editörüne yapıştırdıktan sonra vbs uzantılı olarak kayhdetmeniz yeterli olacaktır.
Leave a Reply