Jak sprawdzić, czy w folderze znajdują się pliki o określonych rozszerzeniach?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
Jak sprawdzić, czy w folderze znajdują się pliki o określonych rozszerzeniach?
Cześć Skrypciarzu! Jak sprawdzić, czy w folderze znajdują się pliki o określonych rozszerzeniach?
-- GM
Cześć GM! To bardzo proste. Wystarczy napisać kwerendę WMI, która będzie zawierać ścieżkę folderu, który chcemy sprawdzić, oraz rozszerzenie, którego szukamy. Ten skrypt na przykład pobiera kolekcję wszystkich plików o rozszerzeniu .txt, znajdujących się w folderze C:\Scripts:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService. _
ExecQuery("SELECT * FROM CIM_DataFile WHERE Path = '\\Scripts\\' " & _
"AND Drive = 'C:' AND Extension = 'txt'")
Wscript.Echo "Number of .txt files found: " & colFiles.Count
Jeśli przyjrzysz się temu skryptowi dokładniej (przecież zawsze przyglądacie się bardzo dokładnie, czyż nie?), rzuci Ci się w oczy kilka rzeczy. Po pierwsze, nie wpisaliśmy ścieżki jako C:\Scripts; zamiast tego oddzieliliśmy dysk (C:) od folderu (Scripts). W jakim celu? Cóż, przede wszystkim dlatego, że w taki właśnie sposób działa klasa CIM_DataFile. To, co rozumiemy przez ścieżkę pliku, jest rozdzielone na dysk i foldery. Parametr Drive (dysk) jest tu opcjonalny; możemy go wyrzucić, chyba, że mamy również folder D:\Scripts. W takim wypadku parametr Drive jest obowiązkowy. Wyrzucenie go spowoduje, że kwerenda zwróci wszystkie pliki znajdujące się w folderze ze ścieżką Scripts. Będzie to oczywiście C:\Scripts, ale również D:\Scripts (oraz E:\Scripts, F:\Scripts i tak dalej).
Po drugie, zauważyłeś zapewne, że użyliśmy podwójnego backslasha - \\ - w otoczeniu ścieżki; tym samym mamy \\Scripts\\ zamiast \Scripts\ (tzn. C:\Scripts). Dlaczego? Tak po prostu działa WMI. Za każdym razem, gdy w klauzuli WHERE (gdzie) zawierana jest ścieżka pliku, trzeba użyć podwójnego backslasha. Gdybyśmy chcieli sprawdzić, czy folder C:\Documents and Settings\Ken Myer\Desktop\Work Files zawiera jakieś pliki .txt, klauzula WHERE wyglądałaby tak:
WHERE Path = '\\Documents and Settings\\Ken Myer\\Desktop\\Work Files\\
Zwróć uwagę na podwójny backslash na końcu. Jest to istotne i nie należy tych znaków usuwać. (Chyba, że nie zależy Ci na tym, czy skrypt zadziała, czy też nie). Z innych istotnych rzeczy: kiedy określamy rozszerzenie pliku, nie piszemy kropki; czyli musi to być txt, a nie .txt.
Kiedy już otrzymamy kolekcję, musimy tylko wywołać echo wartości właściwości kolekcji Count (liczba). Dzięki temu dowiemy się, ile znaleziono plików o rozszerzeniu .txt. Jeśli wartość Count wynosi 0, to znaczy, że w folderze nie ma żadnych plików o takim rozszerzeniu; jeśli wartości wynosi 7, to znaczy, że jest ich 7.
Widzisz, mówiliśmy, że to proste. Od czasu do czasu nawet my wiemy, co mówimy.
Do początku strony