Centrum skryptów - Systemy operacyjne

Jak utworzyć sekwencyjną serię folderów?

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 utworzyć sekwencyjną serię folderów?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak sprawić, żeby wyświetlony został monit o wprowadzenie numeru początkowego i końcowego, a następnie utworzenie sekwencyjnej serii folderów w oparciu o te dwa numery?

-- PM

Cześć Skrypciarze! Odpowiedź

Cześć, PM. Miałem trochę czasu dzisiejszego popołudnia, więc pomyślałem sobie, że mogę odpowiedzieć na Twoje pytanie. W zasadzie, gdyby nie to pytanie, siedziałbym teraz i odliczał godziny do końca pracy, kiedy to pójdę do kina na film: „Życie od kuchni” z Catherine Zeta-Jones, jako „szefową kuchni w modnej restauracji na Manhattanie, która zarówno w życiu osobistym, jak i zawodowym kieruje się podobnymi zasadami – jest rzeczowa aż do bólu, co urzeka, ale również onieśmiela wszystkich wkoło”. Jak można się spodziewać, jej „perfekcjonizm zostaje poddany próbie, kiedy w jej życiu niespodziewanie pojawiają się dwie osoby: oddana pod jej opiekę dziewięcioletnia siostrzenica Zoe oraz niezwykle pewny siebie kucharz Nick Palmer, który pewnego dnia zaczyna pracę jako jej zastępca”.

Ale czad!

Na wypadek, gdyby ktoś się zastanawiał – nie na tego typu filmy chodzę zazwyczaj do kina. Tak naprawdę chodzę do kina mniej więcej dwa razy do roku (co w porównaniu z liczbą meczy wypada dość blado). Co mnie zatem skłania do obejrzenia tego filmu? Mnie nie tylko nikt nie zmusza do pójścia na ten film (jak babcię kocham), ale ja po prostu chcę iść sam z siebie (o tak), a ponadto umieram z ciekawości, jak Zeta-Jones nauczy się „wyrażać siebie również poza granicami swojego królestwa – kuchni”. Cóż, zakładając, że „zdoła porozumieć się z Zoe, a także odnaleźć swoje szczęście u boku Nicka”.

No dobra, może to jest trochę śmieszne, film ma całkiem niezłe recenzje i mam nadzieję spędzić całkiem miły wieczór.

W każdym razie, do seansu pozostało jakieś 6 godzin, dzięki czemu mam dużo czasu na wyjaśnienie, jak działa skrypt umożliwiający użytkownikowi wprowadzeni początkowego i końcowego numeru folderu, a następnie utworzenie sekwencyjnej serii folderów w oparciu o te dwa numery:

Set objFSO = CreateObject("Scripting.FileSystemObject")



intStartingFolder = InputBox("Please enter the starting number:")

intEndingFolder = InputBox("Please enter the ending number:")



For i = intStartingFolder to intEndingFolder

    strNumber = i

    Do While Len(strNumber) < 5

        strNumber = "0" & strNumber

    Loop



    strFolder = "C:\Scripts\2007-" & strNumber

    Set objFolder = objFSO.CreateFolder(strFolder)

Next

Jak widać, zaczynamy od utworzenia wystąpienia obiektu Scripting.FileSystemObject. Żaden nagły zwrot akcji, to jest nasz zwykły wybór, jeżeli chodzi o tworzenie nowych folderów. Następnie używamy funkcji InputBox w celu wyświetlenia monitu o podanie początkowego numeru folderu, wartości, którą zachowujemy w zmiennej o nazwie intStartingFolder:

intStartingFolder = InputBox("Please enter the starting number:")

Następnie akcja się trochę zagęszcza (ciekawe, czy Kate kiedyś znajdzie szczęście u boku przystojnego kucharza Nicka Palmera), po raz kolejny wywołujemy funkcję InputBox, tym razem w celu poproszenia użytkownika o wprowadzenie końcowego numeru folderu i zachowamy tę wartość w zmiennej o nazwie intEndingFolder:

intEndingFolder = InputBox("Please enter the ending number:")

Zanim posuniemy się dalej, chciałbym zaznaczyć, że nie uwzględniliśmy tu żadnej obsługi problemów. Czy to nam może przysporzyć jakiś problemów? Oczywiście, że tak. Z jednej strony, nie można anulować skryptu, który będzie działał nawet, jeżeli użytkownik kliknie przycisk Cancel w polu wprowadzania. (Choć oczywiście nie zadziała prawidłowo.) Na szczęście jest to coś, co możemy naprawić, modyfikując nasze monity InputBox tak, żeby wyglądały następująco:

intStartingFolder = InputBox("Please enter the starting number:")



If intStartingFolder = "" Then

    Wscript.Quit

End If

Innymi słowy, jeżeli użytkownik kliknie przycisk Cancel (co oznacza, że zmiennej intStartingFolder zostanie przypisany pusty ciąg wartości) wywołamy metodę Quit i zakończymy działanie skryptu.

Coś takiego powinni zrobić twórcy filmu „Kosmiczny mecz” w trakcie jego realizacji.

Ponadto powinniśmy także uwzględnić jakiś kod sprawdzający, czy użytkownik faktycznie wprowadził liczbę, a nie wartość ciągu. Na przykład taki:

If Not IsNumeric intStartingFolder Then

    Wscript.Echo "You must enter a number."

    Wscript.Quit

End If

A skoro już tutaj jesteśmy, to powinniśmy także sprawdzić, czy numer folderu końcowego jest większy od numeru folderu końcowego:

If Not intEndingFolder <= intStartingFolder Then

    Wscript.Echo "The ending folder number must be larger than the starting folder number."

    Wscript.Quit

End If

To jednak powoduje zbędne wydłużenie skryptu i jego nadmierne skomplikowanie, więc zdecydowaliśmy się opuścić ten fragment.

Kiedy już mamy nasze numery początkowego i końcowego folderu, następnym krokiem jest uruchomienie pętli For, która będzie działać od numeru początkowego (na przykład 500) do numeru końcowego (na przykład 519). Do tego służy poniższy wiersz kodu:

For i = intStartingFolder to intEndingFolder

Wewnątrz tej pętli przypisujemy wartość zmiennej licznika i do zmiennej strNumber; w naszym przykładzie oznacza to, że – przy pierwszym przejściu pętli – zmienna strNumber będzie miała wartość 500.

Teraz pójdziemy trochę naokoło. Foldery PM miały nazwy podobne do poniższej, z pięcioma cyframi przypisanymi do numeru folderu:

C:\Scripts\2007-00500

Zdecydowaliśmy się przyjąć tę samą konwencję nazywania, co powoduje pojawienie się ważnego pytania: jak sprawić, że nasze foldery przypiszą pięć cyfr do numeru folderu? No cóż, na początek stosujemy funkcję Len oraz poniższy wiersz kodu w celu określenia czy długość wartości zachowanej w zmiennej strNumber (czyli liczba znaków w wartości) jest mniejsza niż 5:

Do While Len(strNumber) < 5

Załóżmy, że tak, co jest oczywistą prawdą, jeżeli zmienna strNumber ma wartość 500. W takim przypadku stosujemy poniższy wiersz kodu w celu ustawienie wartości zmiennej strNumber na bieżącą wartość zmiennej strNumber plus zero prowadzące:

strNumber = "0" & strNumber

W naszym przykładzie oznacza to, że zmienna strNumber ma teraz wartość 0500. Następnie kontynuujemy działanie pętli i sprawdzamy długość „nowej” zmiennej strNumber. Ponieważ długość ma wartość 4, a 4 to mniej niż 5, dodajemy kolejne zero prowadzące, co sprawia, że zmienna strNumber ma wartość 00500. PO czym kontynuujemy działanie pętli i ponownie sprawdzamy długość. A ponieważ długość już nie jest mniejsza niż 5, przerywamy instrukcję Do While i idziemy dalej.

Czego możemy się spodziewać po przerwaniu instrukcji Do While? Cóż, zostaje nam zastosowanie poniższego wiersza kodu do utworzenia ścieżki dla nowego folderu i zachowania jej w zmiennej o nazwie strFolder:

strFolder = "C:\Scripts\2007-" & strNumber

Jaką wartość będzie miała zmienna strFolder? Właśnie taką: C:\Scripts\2007-00500, która, jak się pięknie składa, jest ścieżką jednego z folderów, które musimy utworzyć. Mając to na uwadze, wywołujemy metodę CreateFolder i tworzymy nowy folder:

Set objFolder = objFSO.CreateFolder(strFolder)

W tym momencie kontynuujemy działanie pętli i skrypt automatycznie zwiększy wartość naszej zmiennej licznika o 1 (tak, że i będzie równe 501); następnie powtarzamy ten proces. Trwa to dopóki nie utworzymy folderu C:\Scripts\2007-00519, a Catherine Zeta-Jones nie porozumie się z Zoe i nie znajdzie prawdziwego szczęścia u boku Nicka. Mamy już wszystko, czego chcieliśmy.

Mam nadzieję, że to odpowiada na twoje pytanie, PM. Jeśli nie, to chętnie rozwieję wszelkie wątpliwości nawet, gdyby to miało oznaczać, że zostanę po godzinach i nie zobaczę filmu, który przecież tak bardzo chcę zobaczyć. Przyjemności nie są najważniejsze. Zatem bez skrępowania, proszę o dodatkowe pytania? Żadnych pytań. No to mam przerąbane.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne