Centrum skryptów - Systemy operacyjne

W jaki sposób można utworzyć nowy folder, którego nazwa będzie zależała od bieżącej daty?

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.

W jaki sposób można utworzyć nowy folder, którego nazwa będzie zależała od bieżącej daty?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Chcę co wieczór tworzyć nowy folder, którego nazwa zależałaby od bieżącej daty. Czy to możliwe?

-- DM

Cześć Skrypciarze! Odpowiedź

Cześć, DM. Odpowiadając na niezadane pytanie, co u nas słychać: Skrypciarz piszący te słowa nie zasiadł ostatecznie w ławie przysięgłych; wskutek tego, wrócił do pracy i może pisać te słowa. Nie mamy pojęcia, dlaczego nie został wybrany, choć przypuszczamy, że jego odpowiedź na pytanie o sposób podjęcia decyzji w jakiejś sprawie mogła mieć na to pewien wpływ. Możliwe, że mógł się był ugryźć w język, zanim powiedział: - Zastrzelmy wszystkich, Bóg rozpozna swoich.

Uwaga wydawcy: Po uznaniu za niezdatnego na sędziego przysięgłego, Skrypciarz piszący te słowa ciężko pracuje nad uznaniem za niezdatnego do pracy przez Microsoft. I chociaż ułatwiłoby to pracę Wydawcy Skrypciarzy, to mimo wszystko stara się ona jak może, by powstrzymać go przed pisaniem tekstów w rodzaju „zastrzelmy wszystkich”. Ale ma tylko dwie ręce, więc czasami się jej nie udaje.

Spokojnie, żartujemy. Tak naprawdę wcale tego nie powiedział (choć jego rzeczywista odpowiedź nie byłaby pewnie dużo lepsza). W rzeczywistości został zwolniony z obowiązków sędziego przysięgłego za sprawą rabanu, jaki podnieśli wierni fani niniejszej serii, przerażeni wizją, że przez trzy tygodnie procesu artykuły nie będą się ukazywać.

No dobra, nie było takiego znowu rabanu, ale domyślamy się, że tylko dlatego, iż nikt z Was nie ma adresu Sądu Okręgowego Hrabstwa King. Mówiąc szczerze, Skrypciarz piszący te słowa nie został sędzią przysięgłym z powodów losowych – numer, który mu przydzielono po zakończeniu wszystkich formalności został losowo odrzucony.

Co wydaje się sprawiedliwe – z powodów czysto losowych dostał on też pracę Skrypciarza. Teraz jego rachunki z Wszechświatem zostały wyrównane!

Tak czy inaczej, Skrypciarz piszący te słowa powrócił. A cóż mogłoby uczcić jego powrót godniej, niż skrypt tworzący co wieczór nowy folder, którego nazwa zależy od bieżącej daty:

strMonth = Month(Date)



If Len(strMonth) = 1 Then

    strMonth = "0" & strMonth

End If



strDay = Day(Date)



If Len(strDay) = 1 Then

    strDay = "0" & strDay

End If



strYear = Year(Date)



strFolderName = "C:\Scripts\Tammy_" & strMonth & "-" & strDay & "-" & strYear



Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFolder = objFSO.CreateFolder(strFolderName)

Jak widać, nie jest on zbyt długi, a jego większa część jest poświęcona ustawieniu właściwej nazwy folderów. DM chce uzyskać nazwy folderów takie jak ta: C:\Scripts\Tammy_01-22-2007 (kolejność: miesiąc-dzień-rok). A DM zawsze dostaje to, czego chce.

Uwaga. Nie, przykro mi, DM, tego nie dostaniesz… Ani tamtego… No tak, tak mówiliśmy, ale to była hiperbola literacka.

Zacznijmy od początku – ustalmy, jak utworzyć nazwę w oparciu o bieżącą datę (wiemy, że wielu z Was się to bardzo przyda). Zaczynamy od przypisania nazwy bieżącego miesiąca (korzystając z funkcji Month) zmiennej o nazwie strMonth. Zmienna strMonth będzie miała wartość odpowiadającą numerowi danego miesiąca; mamy styczeń, więc wartość ta wyniesie 1.

Co dla wielu z Was może się wydać problemem – w końcu przeznaczyliśmy dwa miejsca na miesiąc, co oznacza, że wolelibyśmy, aby wartość strMonth wyniosła 01. Żaden problem; załatwia to poniższy fragment kodu:

If Len(strMonth) = 1 Then

    strMonth = "0" & strMonth

End If

Używamy tu funkcji Len, która sprawdza liczbę znaków w zmiennej strMonth. Jeśli liczba ta (czyli długość zmiennej) równa jest 1 – jak w wypadku stycznia – poniższy wiersz kodu dodaje do niej cyfrę 0:

strMonth = "0" & strMonth

Natomiast jeśli liczba znaków nie jest równa 1 (co znaczy, że musi być równa 2), po prostu idziemy dalej.

Kolejnym krokiem jest wykonanie analogicznego procesu w celu ustalenia dnia miesiąca. Używamy w tym celu funkcji Day, która wyłapie nam wartość, oraz fragmentu kodu podobnego do tego, którego użyliśmy powyżej, a który w razie konieczności doda do wartości cyfrę 0:

strDay = Day(Date)



If Len(strDay) = 1 Then

    strDay = "0" & strDay

End If

I w końcu używamy funkcji Year do zapisania bieżącego roku w zmiennej strYear:

strYear = Year(Date)

W tym wypadku nie musimy się martwić dodawaniem zera na początku. Przeznaczyliśmy cztery miejsca na podanie roku, a funkcja Year domyślnie podaje wartość czterocyfrową – np. 2007.

Po określeniu wartości miesiąca, dnia i roku, możemy użyć poniższego wiersza kodu, by utworzyć kompletną ścieżkę dostępu do nowego folderu:

strFolderName = "C:\Scripts\Tammy_" & strMonth & "-" & strDay & "-" & strYear

Łączymy tu poniższe wartości (zakładamy na potrzeby przykładu, że jest 22 stycznia 2007 r.) i zapisujemy uzyskany ciąg znaków w zmiennej o nazwie strFolderName:

C:\Scripts\Tammy_

+                   01

+                    -

+                   22  

+                    -

+                 2007

Ostatecznym rezultatem jest potrzebna nam ścieżka dostępu: C:\Scripts\Tammy_01-22-2007.

Teraz musimy jeszcze tylko utworzyć wystąpienie obiektu Scripting.FileSystemObject, a następnie utworzyć nowy folder za pomocą metody CreateFolder:

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFolder = objFSO.CreateFolder(strFolderName)

Wadą tego skryptu jest to, że działa on wyłącznie na komputerze lokalnym. Czy można utworzyć analogiczny folder na komputerze zdalnym? Można; potrzebne informacje można znaleźć w archiwalnym artykule Hej Skrypciarze!.

Dobrze. Mamy zatem skrypt, ale jak sprawić, by uruchamiał się co wieczór? Otóż najlepiej będzie skonfigurować go jako zadanie harmonogramu. Następnie można przypisać pełną ścieżkę dostępu do omówionego przed chwilą skryptu jako argument wiersza poleceń pliku Cscript.exe, którego będziemy używać jako programu wykonywalnego.

Czy zatem Skrypciarz piszący te słowa był rozczarowany tym, że nie zasiadł ostatecznie na ławie przysięgłych? No cóż, pod pewnymi względami – tak. Z drugiej strony, zakładano, że proces potrwa trzy tygodnie, a ciężko byłoby uwierzyć, że jakiekolwiek zajęcie, w którym żadnej roli nie odgrywa tej czy innej wielkości piłka, mogłoby utrzymać uwagę owego Skrypciarza dłużej niż przez trzy godziny. Poza tym, po prostu musiał wrócić do pracy – pozostali Skrypciarze byli bez niego zagubieni! Biedni, bezradni jak dzieci…

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne