Centrum Skryptów - Systemy operacyjne

Jak sprawdzić, czy w folderze znajdują się pliki o określonych rozszerzeniach? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

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 Do początku strony


Centrum Skryptów - Systemy operacyjne