Centrum skryptów - Systemy operacyjne

Jak mogę zmienić nazwę folderu?

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 mogę zmienić nazwę folderu?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! Jak mogę dodać przyrostek do nazwy folderu? Na przykład chciałbym zmienić nazwę folderu c:\Luty na C:\Luty_2006

-- NB

Cześć Skrypciarze! Odpowiedź

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

Centrum skryptów - Systemy operacyjne