Jak mogę zmienić nazwę folderu?
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 mogę zmienić nazwę folderu?
Cześć Skrypciarze! Jak mogę dodać przyrostek do nazwy folderu? Na przykład chciałbym zmienić nazwę folderu c:\Luty na C:\Luty_2006
-- NB
Hej, NB. Czy wiesz, że pewnego lipcowego dnia Skrypciarz, który napisał tę rubrykę, przechadzał się po pokoju gościnnym, podczas gdy jego syn oglądał na kanale ESPN słynne zawody w jedzeniu hot-dogów. (Och nie, nie przejmuj się, to nie jest początek jakiegoś długiego i bezcelowego wykładu przeciwko pokazywaniu treści pokarmowych na kanale sportowym. W końcu jeśli telewizja ESPN zamierza pokazywać konkursy ortograficzne, mecze w pokera i piłkę nożną, to dlaczego nie miałaby pokazywać zawodów w jedzeniu?). Skrypciarz który napisał tę rubrykę oglądał przez kilka minut i, prawdę mówiąc, był nieco zdegustowany tym co zobaczył. Dobre nieba, pomyślał, jak ludzie mogą tak siedzieć i ciągle, bezmyślnie wpychać w siebie pełno takiego żarcia? Co jest nie tak z tymi ludźmi?!?
Ale to było ostatniego lata, na długo przed Świętem Dziękczynienia. Teraz po czterech dniach objadania się indykiem, ziemniakami z sosem, słodkimi ziemniakami, nadzieniami, roladami, podsmażaną zieloną fasolką i bekonem, różnymi galaretkami owocowymi i sałatkami, plackami z dyni, plackami z jabłek i malin - cóż, wystarczy że powiemy, iż Skrypciarz który napisał tę rubrykę ma teraz dużo więcej zrozumienia dla ludzi, którzy bezcelowo wpychają w siebie pełno jedzenia.
Uwaga. Ale o co chodzi? Czy Skrypciarz który napisał tę rubrykę był wdzięczny za miniony urlop? Przede wszystkim był on wdzięczny za to że ma taką pracę, w której przez cały dzień siedzi i nie musi się zbyt wiele poruszać. Lecz nie mart się: na pewno wygrzebie się na czas i zdąży na gwiazdkowy obiad. |
Na szczęście Skrypciarz który napisał tę rubrykę nie musi się za dużo ruszać, aby odpowiedzieć na Twoje pytanie, NB. Potrzebujesz skryptu, który doda przyrostek do nazwy folderu? Oto on:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFolders = objWMIService.ExecQuery _
("Select * From Win32_Directory Where Name = 'C:\\Luty'")
For Each objFolder in colFolders
strNewName = objFolder.Name & "_2006"
objFolder.Rename strNewName
Next
Tak, to jest bardzo prosty skrypt; czego więcej można spodziewać się po rubryce napisanej krótko po Dniu Dziękczynienia? Jak widzisz zaczęliśmy od połączenia się z usługą WMI na lokalnym komputerze, jednakże - jak niemal wszystkie skrypty WMI - moglibyśmy w prosty sposób uruchomić ten skrypt na maszynie zdalnej (to znaczy dodać przyrostek do folderu znajdującego się na jakimś komputerze w sieci). Po połączeniu się mamy linię kodu pobierającą zbiór wszystkich folderów o Nazwie (co w mowie WMI jest odpowiednikiem ścieżki do pliku) równej C:\Luty:
Set colFolders = objWMIService.ExecQuery _
("Select * From Win32_Directory Where Name = 'C:\\Luty'")
Och nie, wcale nie zjedliśmy zbyt wiele żurawiny, orzechów i sałatek tego weekendu. Cóż, Ok, w rzeczywistości zjedliśmy to wszystko, zostawiając jedynie łyżeczkę lub dwie dla pozostałych członków rodziny. Jednakże to nie dlatego wpisaliśmy taką nazwę C:\\Luty. Po prostu dwa ukośniki są rzeczywiście wymagane: to dlatego, że ukośnik jest znakiem zastrzeżonym w WMI i za każdym razem gdy używasz takiego znaku w zapytaniu WMI, musisz go "zamaskować", poprzedzając jeszcze jednym ukośnikiem. Co musielibyśmy zrobić, gdybyśmy chcieli zmienić nazwę folderu C:\Luty\Osobiste\Recenzje? Musielibyśmy użyć zapytania takiego jak to przedstawione poniżej, pamiętając o tym, żeby zamaskować każdy znak ukośnika występujący w ścieżce:
Set colFolders = objWMIService.ExecQuery _
("Select * From Win32_Directory Where Name = 'C:\\Luty\\Osobiste\\Recenzje'")
W wyniku wykonania zapytania dostaniemy zbiór składający się z wszystkich folderów w komputerze o nazwie C:\Luty (a ponieważ nazwy folderów - a raczej ścieżki dostępu - muszą być niepowtarzalne, otrzymany zbiór będzie zawierał nie więcej niż jeden element). Mając taki zbiór używamy pętli For Each, w której pobieramy z niego nazwę każdego folderu. Wewnątrz tej pętli konstruujemy nową nazwę folderu, biorąc tę istniejącą i dodając do niej łańcuch znaków _2006. Nową nazwę ścieżki (C:\Luty_2006) przechowujemy w zmiennej o nazwie strNewName:
strNewName = objFolder.Name & "_2006"
Teraz, jak już zbudowaliśmy nową nazwę, możemy użyć metody Rename w celu zmiany nazwy C:\Luty. Musimy pamiętać, że argumentem tej metody jest wartość zmiennej strNewName:
objFolder.Rename strNewName
Oczywiście, aby zmienić nazwę folderu musisz przekazać do metody pełną nową ścieżkę. Przekazanie jedynie samej nazwy folderu (Luty_2006) nie spowoduje niczego dobrego.
Ponieważ prawdopodobnie chcemy nieco poćwiczyć, możemy przejrzeć dodatkowy skrypt. Przypuśćmy że mamy folder o nazwie C:\Wydatki, w którym znajduje się szereg podfolderów (Styczeń, Luty, Marzec, itp.). Jak dodać przyrostek do każdego z tych podfolderów? Nie ma sprawy, ten mały skrypt (którego szczegółowo dzisiaj nie omówimy) wykona taką sztuczkę:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
strFolderName = "C:\Wydatki"
Set colFolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")
For Each objFolder in colFolders
strNewName = objFolder.Name & "_2006"
objFolder.Rename strNewName
Next
No tak, nie spodziewałeś się, że będzie to aż tak męczące.
Nawiasem mówiąc, wiemy że wielu z was umiera z ciekawości kto wygrał tegoroczny Terducken Bowl. Niestety dobrnęliśmy tylko do połowy meczu, tj. do stanu 49:49 (gra toczy się do 100), a dokończymy go na Gwiazdkę.
Pewnie jesteście ciekawi dlaczego nie zakończyliśmy tej gry? Cóż, przede wszystkim dwóch graczy (kuzynów Skrypciarza) spóźniło się, ponieważ musieli pomóc w sprzątaniu domu. (My również byliśmy w szoku: czy w dniu zeszłorocznego Super Bowl Ben Roethlisberger i Jerome Bettis gwiazdy Pittsburgh Steelers musiały przed meczem sprzątać swoje domy?) Poza tym mecz odbywał się podczas huraganu, dochodzącego w porywach do 250,000 mil na godzinę. To nie są żadne wymysły. Jeden z kuzynów Skrypciarza rzucił piłkę bezpośrednio w środek pola, lecz pojawił się duży podmuch wiatru i zdmuchnął ją z pola, po czym przerzucił przez płot na podwórko sąsiadów.
Tak czy inaczej Skrypciarz, który jest autorem tej rubryki już cieszy się na myśl o zbliżającej się Gwiazdce. A co z jedzeniem? Och oczywiście, prawdopodobnie zje on coś. Lecz jedynie z grzeczności, tj. żeby nie zranić uczuć mamy. Może trochę indyka, trochę sosu oraz cienki kawałek ciasta.
OK, może dwa cienkie kawałki ciasta.
Do początku strony |