SoftwareZabawy z plikami

Zabawy z plikami

W tym odcinku dwa skrypty. Oba pracują na plikach i ułatwiają uporządkowanie danych przechowywanych na dysku. Dzięki skryptom posegregujesz pliki według ich nazw, a także pogrupujesz we właściwych folderach dokumenty zapisane na pulpicie.

Zabawy z plikami

Oba prezentowane skrypty wykorzystują usługę WMI (Windows Management Instrumentation). Jest to usługa systemowa, dzięki której użytkownik tworzący własne programy, czy właśnie skrypty, ma możliwość skontrolowania stanu wszystkich zasobów komputera włącznie z uruchomionymi aplikacjami, działającymi procesami, otwartymi plikami czy pracującym sprzętem. Zgodnie z zasadą, że najlepiej kształcić swoje umiejętności na konkretnych przykładach, także i w tym numerze przedstawiamy kilka przydatnych skryptów gruntujących wiedzę z poprzednich odcinków.

Przenoszenie plików do właściwych folderów

Załóżmy następującą sytuację. Masz na dysku zbiór plików (np. zdjęć) o określonych nazwach. Chcesz uporządkować te pliki w taki sposób, by zostały przeniesione do wybranych folderów w zależności od nazwy określającej, z jakiej wycieczki, uroczystości czy z którego roku pochodzą fotografie. Poniższy skrypt automatycznie przeniesie pliki w zależności od roku znajdującego się w nazwie pliku. Pomoże w tym odpowiedni skrypt – listing 1.

Krok 1

Założyliśmy, że nazwy plików, które skrypt ma automatycznie przenieść do odpowiednich folderów, wyglądają np. tak: plik200601.jpg, plik200602.jpg, plik200701.jpg… itd. Istotne jest przede wszystkim to, by rok „zaszyty” w nazwie był reprezentowany przez cztery cyfry (i żeby w nazwie nie było dwóch liczb czterocyfrowych).

Krok 2

Do przeprowadzenia za pomocą tworzonego skryptu działań na plikach można wykorzystać zarówno obiekt FileSystemObject (pozwalający odwołać się z poziomu skryptu do elementów systemu plików), jak i usługę WMI (Windows Management Instrumentation – Instrumentacja Zarządzania Windows). Zdecydowaliśmy się na drugie, bardziej uniwersalne rozwiązanie, które m.in. umożliwia zdalne wykonywanie skryptu.

Krok 3

Stąd też wynika pojawienie się zmiennej strComputer w linii 1 kodu. Domyślnie, między cudzysłowami znajduje się znak kropki. Oznacza to, że działania skryptu będą dotyczyły komputera lokalnego (tego, na którym skrypt jest uruchamiany). Wystarczy jednak, że zmodyfikujesz ten wiersz i wprowadzisz np. zapis:

strComputer = „komputer01”

Będzie to oznaczało, że skrypt zostanie wykonany na maszynie o nazwie „komputer01”, znajdującej się w twojej sieci lokalnej.

Krok 4

W linii 3 pojawia się dziwny zapis – \root\cimv2. Czy chodzi o coś wspólnego z Linuksem (root to nazwa użytkownika administracyjnego w systemach linuksowych)? Nie w tym przypadku. Dane z usługi WMI można pobierać za pomocą tzw. kwerend (czyli zapytań kierowanych do bazy danych). Każda z kwerend jest wykonywana w konkretnym obszarze nazw dla usługi WMI. Powyższy zapis jest właśnie domyślną przestrzenią nazw dla usługi WMI. Pozostała część linii 3 powinna być zrozumiała. To po prostu utworzenie obiektu objWMIService, za którego pomocą skrypt będzie mógł „odpytywać” WMI odnośnie odpowiednich danych.

Krok 5

Linie od 5 do 7 to utworzenie kolekcji danych (w naszym przykładzie – plików) za pomocą kwerendy ASSOCIATORS OF (jest to jedna z kwerend usługi WMI). Na razie skrypt jeszcze nie analizuje nazw, lecz pobiera wszystkie pliki (wystąpienia klasy CIM_DataFile) znajdujące się w folderze C:\Test. Oczywiście, jeżeli chcesz, by skrypt zadziałał na innym folderze, zmień widoczną w linii 6 ścieżkę.

Krok 6

Linia 9 to utworzenie wystąpienia obiektu VBScript.RegExp, dzięki któremu skrypt będzie mógł wyszukać wyrażenia regularne (tu: lata) w nazwach plików.

Krok 7

Linie od 11 do końca skryptu zajmuje znana ci już z poprzednich odcinków konstrukcja – pętla For Each…Next. W liniach 12 i 13 następuje przypisanie wartości dwóch właściwości utworzonego w linii obiektu wyrażeń regularnych (VBScript.RegExp). Poprzez ustawienie właściwości Global na wartość True powodujesz, że skrypt wyszuka wszystkie wystąpienia danego wzoru (w naszym przykładzie – czterocyfrowej liczby oznaczającej rok). Z kolei właściwość Pattern (z ang. wzór) to po prostu szukana wartość. Oczywiście lat w nazwach pliku nie szukamy poprzez dosłowne wartości (z założenia nie wiadomo, jakie one są). Dlatego też używa się zwrotu \d{4} będącego składnią wyrażenia regularnego dla czterech cyfr.

Krok 8

W linii 15 następuje przypisanie nazwy pierwszego pliku z kolekcji do zmiennej strSearchString. W kolejnej, 16 linii za pomocą metody Execute wyszukiwane są nazwy pliku dla wszystkich wystąpień wzoru (czterocyfrowego roku). Znalezione wyniki zostaną zapisane do kolekcji colMatches.

Krok 9

W linii 18 do zmiennej strYear zostaje przypisany pierwszy (o indeksie 0) element (wartość Value) kolekcji colMatches. W ten sposób skrypt „poznaje” rok zaszyty w nazwie pliku.

Krok 10

Linie od 20 do 23 to już działania bezpośrednio na plikach. Najpierw tworzona jest – za pomocą zmiennej strNewFile – nowa ścieżka zapisu (wraz z nazwą pliku i rozszerzeniem), a w kolejnych dwóch liniach wykonywane są operacje – najpierw kopiowania, a następnie kasowania z lokalizacji źródłowej. Czemu tak? Wynika to z braku metody przenoszenia plików w usłudze WMI.

Krok 11

Ostatnia linia – 24 – to powrót na początek pętli. Będzie ona powtarzana tak długo, dopóki będą elementy w kolekcji colFiles. Uwaga! Skrypt ten zakłada, że docelowe foldery (z numerami lat w nazwach) już istnieją i są podfolderami foldera z linii 6 (czyli C:\Test). Jeżeli chcesz poznać sposób tworzenia folderów przez skrypt, zapoznaj się z kolejnym skryptem.

Porządkowanie dokumentów zapisanych na pulpicie

Wielu użytkowników zapisuje tworzone przez siebie dokumenty na pulpicie Windows. Rezultat? Po dłuższym korzystaniu z komputera pulpit usiany jest mnóstwem ikonek, trudno odnaleźć właściwą. Wystarczy jednak użyć skryptu, który automatycznie uporządkuje zawartość pulpitu, przenosząc pliki do automatycznie utworzonych folderów wg rozszerzeń plików (np. pliki .doc zostaną przeniesione do foldera Doc, pliki .xls do foldera Xls itp. – listing 2.

Obraz

Krok 1

Linia 1 to definicja stałej DESKTOP. Jej wartość będzie później potrzebna do tego, by skrypt uwzględniał tylko pliki znajdujące się w folderze Pulpit danego użytkownika. Jeżeli jednak z pewnych względów chciałbyś dysponować skryptem przenoszącym pliki z pulpitu wszystkich użytkowników, zastąp linię pierwszą następującym zapisem:

Const ALL_USERS_DESKTOP = &H19&

Krok 2

Linia 3 to utworzenie obiektu Shell.Application, a następnie – w liniach od 5 do 7 – skrypt łączy się z pulpitem, pobiera ścieżkę do niego, która zostaje przypisana zmiennej strPath.

Krok 3

Linie od 11 do 16 powinny wyglądać znajomo. Istotnie, wykorzystano w tym przypadku – podobnie jak w poprzednio opisywanym skrypcie – usługę WMI i kwerendę ASSOCIATORS OF do utworzenia kolekcji plików znajdujących się na pulpicie.

Krok 4

Co dalej? Czas na wystąpienie obiektu Scripting.FileSystemObject (linia 17) i ustawienie pętli For Each (linie od 19 do 29), która „przeszuka” całą kolekcję plików zwróconą kwerendą usługi WMI, a następnie przeniesie znalezione pliki do odpowiednich folderów.

Krok 5

W pierwszym wierszu wewnątrz pętli budowana jest ścieżka do foldera docelowego dla przenoszonych plików. Zgodnie z wcześniejszymi założeniami nazwa foldera ma być taka jak rozszerzenie plików (bez kropki), jakie do tego foldera mają być przeniesione. Stąd też zwrot – w linii 20objFile.Extension.

Krok 6

Wewnątrz pętli For Each znajduje się konstrukcja warunkowa If Then Else. Po co? Otóż najpierw (linie 21 – 23) przebiega sprawdzenie, czy istnieje docelowy folder dla plików o określonym rozszerzeniu i jeżeli tak, następuje przeniesienie do niego odpowiednich plików.

Krok 7

Kolejne linie – od 24 do 27 – są przydatne w sytuacji, gdy folder nie istnieje. Wtedy w pierwszej kolejności jest on tworzony, a następnie są do niego przenoszone pliki.

Krok 8

Z pewnością zauważysz podobieństwa i różnice w kodzie obu skryptów. Spróbuj tak zmodyfikować pierwszy ze skryptów, by pliki o nazwach zawierających rok były przenoszone do automatycznie tworzonych nowych folderów. Mechanizm automatycznego tworzenia folderów (o nazwach odpowiadających rozszerzeniu plików) wyjaśniliśmy w drugim skrypcie. Nic nie stoi też na przeszkodzie, by rozbudować skrypt o działanie na kilku folderach jednocześnie.

Wybrane dla Ciebie