Centrum Skrypciarzy - Systemy Operacyjne

Jak zamapować dysk, skopiować na niego plik i potem odmapować?

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 zamapować dysk, skopiować na niego plik i potem odmapować?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! Jak zamapować dysk, skopiować na niego plik i potem odmapować?

-- ZK

Cześć Skrypciarze! Odpowiedź

Hej, ZK. Wiecie co? Czasem mamy problemy z udzielaniem odpowiedzi, a to dlatego, że sami zazwyczaj nie robimy rzeczy o jakie jesteśmy pytani. Usunąć co drugi wiersz w pliku tekstowym? Cóż, nigdy tego nie robiliśmy, ale mając do dyspozycji trochę czasu zapewne sobie poradzimy. Pobrać wszystkie dane z kolumny arkusza Excel i przekonwertować je do tablicy? To samo: nie mamy w głowach odpowiedzi na to pytanie, ale jesteśmy prawie pewni, że możemy usiąść i coś wymyślimy.

No, ale to pytanie jest inne. Wykonać kawał roboty i prawie od razu musieć się z tego wycofać? To coś w czym mamy mnóstwo doświadczenia:

Set objNetwork = CreateObject("Wscript.Network") objNetwork.MapNetworkDrive "Z:", "\\atl-fs-01\Public"



Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile "C:\Scripts\Test.txt", "Z:\"



objNetwork.RemoveNetworkDrive "Z:"

Jak widzicie - to prostsze niż się mogło wydawać. (Musicie przyjąć, że jeśli Skrypciarze wiedzą jak coś zrobić, to nie może to być zbyt skomplikowane.) Zaczynamy od utworzenia egzemplarza obiektu Wscript.Network, potrzebnego do zamapowania dysku w komputerze. (Powinniśmy tu dodać, że obiekt Network umożliwia mapowanie dysków jedynie na komputerze lokalnym. Nie da się przerobić tego skryptu, by mapował dysk na komputerze zdalnym). Następnie mapujemy dysk Z na ścieżkę UNC \\atl-fs-01\Public:

objNetwork.MapNetworkDrive "Z:", "\\atl-fs-01\Public"

Słuszne pytanie: co jeśli dysk Z już został zamapowany na inną lokację? Cóż, w takim przypadku, skrypt nie zadziała - nie można zamapować dysku do litery, która już jest w użyciu. Ale nie martwcie się; jeśli jest to problemem, możecie zajrzeć do tej rubryki Cześć Skrypciarze! , gdzie pokazujemy jak w skrypcie określić (i wykorzystać) kolejną dostępną literę dysku.

Po zamapowaniu dysku jesteśmy gotowi do skopiowania na niego pliku. W tym celu tworzymy egzemplarz Scripting.FileSystemObject i używamy metody CopyFile, by skopiowac plik C:\Scripts\Test.txt na dysk Z. Do tego służą poniższe dwa wiersze kodu:

Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile "C:\Scripts\Test.txt", "Z:\"

Słuszna uwaga: jeśli plik Test.txt istnieje już na dysku Z, skrypt znowu nie zadziała, a to dlatego, że domyślnie obiekt FileSystemObject nie nadpisuje istniejących plików. Ale znowu nie ma się czym martwić: wystarczy dodać opcjonalny parametr True, by umożliwić nadpisywanie istniejących plików przez obiekt FileSystemObject. Jeśli nadpisanie pliku Test.txt jest pożądane, wystarczy zmienić polecenie CopyFile w taki sposób:

objFSO.CopyFile "C:\Scripts\Test.txt", "Z:\", True

Wierzcie, albo i nie, ale to już prawie koniec. (Ludzie, naprawdę lubimy odpowiadać na takie pytania!) Pozostało nam tylko odmapować dysk Z, do czego użyjemy wywołania metody RemoveNetworkDrive z parametrem określającym literę dysku, który ma zostać usunięty:

objNetwork.RemoveNetworkDrive "Z:"

I już. Jeśli spojrzycie na komputer lokalny nie zobaczycie napędu Z. A jeśli sprawdzicie \\atl-fs-01\Public to powinniście tam znaleźć kopię pliku Test.txt. Wszystko dokładnie tak, jak chcieliśmy.

Co, jak już o tym wspominacie, jest trochę dla nas nietypowe, co?

No to jak? Czy Skrypciarze rzeczywiście tak często muszą wycofywać się z rzeczy, które własnie zrobili, czy też stroją sobie żarty? Ujmijmy to tak. Jakiś czas temu, Skrypciarz, który tworzy tę rubrykę usiadł, by odpowiedzieć na pytanie. Nie tylko, że znał odpowiedź na pytanie, ale też pisanie rubryki szło mu z niezwykłą łatwością: słowa wprost płynęły. Parę chwil przed opublikowanie artykułu odkrył, dlaczego tak dobrze mu szło: kilka tygodni temu już odpowiedział na dokładnie takie samo pytanie i napisał identyczny artykuł. Czy to nie... urocze...

Na szczęście piszący tę rubrykę Skrypciarz jest przyzwyczajony do takich sytuacji. Coś potrzebuje nowych baterii? Możecie dać sobie rękę uciąć, że zdejmie obudowę, wyjmie zużyte baterie i ostrożnie założy obudowę z powrotem. Dopiero wtedy zda sobie sprawę, że nowe baterie wciąż leżą obok niego. Ma iść do sklepu i kupić jajka (tylko i jedynie jajka)? Możecie zapewne zgadnąć ile wypraw do sklepu będzie potrzebnych zanim wróci z jajkami a nie, powiedzmy, mlekiem czy chlebem. (Podpowiedź: jeden nie jest poprawną odpowiedzią).

Innymi słowy, dzień jak co dzień.

 Do początku strony Do początku strony

Centrum Skrypciarzy - Systemy Operacyjne