Jak usunąć wszystkie pliki .CSG z napędu C?
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 usunąć wszystkie pliki .CSG z napędu C?
Cześć, Skrypciarze! Jak usunąć wszystkie pliki .CSG z napędu C?
-- DL
Cześć, DL. Zabawne, jak szybko się wszystko zmienia. Jeszcze parę godzin temu Skrypciarz piszący te słowa miał taki zły humor, że wcale nie miał zamiaru odpowiadać na Twoje czy czyjekolwiek pytanie o usuwanie plików .csg z napędu C. Cóż sprawiło, że radosny na co dzień Skrypciarz stał się takim mrukiem?
Jego wieczór zaczynał się nienajgorzej: nie ma nic lepszego, niż wyprawa ze Skrypciarskim Synem na mecz koszykówki, w którym grają Waszyngtońskie Husky przeciwko Oregon Ducks.
W połowie meczu Husky mieli 11-punktową przewagę nad Kaczkami, ale po paru minutach błyskawicznie ją stracili. To była tragedia. Ponieważ wcześniej Skrypciarza spotkały inne nieszczęścia – np. zamknięto jego ulubiony bar kanapkowy – postanowił, że jedyne co mu zostanie w wypadku przegranej Huskych, to przeprowadzka na bezludną wyspę.
Na całe szczęście Husky wzięli się w garść i spuścili Kaczkom manto, wygrywając 89-77. W związku z tym Skrypciarz piszący te słowa odwołał rezerwację biletu na bezludną wyspę, a potem przysiadł fałdów i napisał skrypt mogący usunąć wszystkie pliki .csg z napędu C:.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile Where Drive = 'C:' and Extension = 'csg'")
For Each objFile in colFiles
objFile.Delete
Next
Jak widać, skrypt nie jest specjalnie trudny. Na początku łączymy się z usługą WMI na komputerze lokalnym. Czy można użyć tego samego skryptu, by usunąć pliki .csg z komputera zdalnego? Jasne, że tak; wystarczy przypisać nazwę komputera zdalnego zmiennej strComputer w taki sposób:
strComputer = "atl-fs-01"
Po połączeniu z WMI uruchamiamy następującą kwerendę, która zwróci nam kolekcję wszystkich plików .csg, jakie znajdują się na dysku C:
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile Where Drive = 'C:' and Extension = 'csg'")
Podobnie jak w wypadku większości kwerend WMI, sekretem jest tu klauzula Where. Nie chcemy przecież, aby nasza kolekcja objęła całą zawartość napędu C; chcemy znaleźć i usunąć jedynie takie pliki, które spełniają dwa warunki:
- znajdują się na dysku C,
- mają rozszerzenie .csg.
Dlatego też nasza klauzula Where wygląda tak: Where Drive = 'C:' and Extension = 'csg'. Zwróćmy uwagę na dwie rzeczy. Po pierwsze, dwukropek jest częścią oznaczenia napędu – jest to dysk C:, a nie C. Po drugie, według WMI kropka nie należy do rozszerzenia. Dlatego poszukujemy rozszerzenia csg, a nie .csg.
Co robimy teraz, kiedy mamy już kolekcję plików stworzoną przez kwerendę? To proste: uruchamiamy pętlę For Each, która przejdzie przez całą kolekcję; wewnątrz pętli umieszczamy metodę Delete, która usuwa wszystkie pliki jeden po drugim. Służy do tego poniższy fragment kodu:
For Each objFile in colFiles
objFile.Delete
Next
Może to zaskakujące, ale to już koniec. Skrypt jest króciutki, ale niezawodnie usuwa wszystkie pliki .csg z napędu C (i tylko z niego).
Tymczasem Skrypciarz piszący te słowa chciałby poruszyć jeszcze jedną kwestię. Ktoś może się zastanawiać, czy przegrana Huskych – jeśli wziąć pod uwagę, że w tym sezonie niektórzy zawodnicy zostali kontuzjowani, a inni są niedoświadczeni – byłaby aż taką tragedią? W końcu Kaczki zajmują siódme miejsce w rankingu ogólnokrajowym.
Ujmijmy to tak: Załóżmy, że na Ziemi lądują Marsjanie i wyzywają ją na mecz koszykówki. Jeśli Ziemia wygra, Marsjanie odlecą i będziemy uratowani. Jeśli Ziemia przegra, Marsjanie zniszczą całą planetę.
Załóżmy jeszcze, że na reprezentantów Ziemi wybrane zostaną Kaczki. Jak myślicie, za kim w takiej sytuacji byliby Skrypciarze?
No cóż: zniszczenie Ziemi nie jest wygórowaną ceną za widok przegranej Oregonu.
Do początku strony |