A A A

Zabawy z plikami

PC Format 1/2008
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.

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.


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).


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.


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.


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.


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ę.


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.


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.


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.


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.


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.


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.


Tagi: porady
Ocena:
Oceń:
Komentarze (0)

Redakcja nie ponosi odpowiedzialności za treść komentarzy. Komentarze wyświetlane są od najnowszych.
Najnowsze aktualności




Artykuły z wydań

  • 2019
  • 2018
  • 2017
  • 2016
  • 2015
  • 2014
  • 2013
  • 2012
  • 2011
  • 2010
  • 2009
  • 2008
  • 2007
Zawartość aktualnego numeru

aktualny numer powiększ okładkę Wybrane artykuły z PC Format 1/2020
Przejdź do innych artykułów
płyta powiększ płytę
Załóż konto
Co daje konto w serwisie pcformat.pl?

Po założeniu konta otrzymujesz możliwość oceniania materiałów, uczestnictwa w życiu forum oraz komentowania artykułów i aktualności przy użyciu indywidualnego identyfikatora.

Załóż konto