Tworzę prosty skrypt kopii zapasowej z wiersza polecenia, aby za pomocą robocopy wykonać kopię lustrzaną „ważnych” rzeczy na moim urządzeniu NAS. Wolałbym nie polegać na mocno zakodowanej literze dysku dla tego urządzenia NAS. W skrypcie chciałbym zmapować literę dysku tymczasowego, skopiować odpowiednie pliki i zutylizować zmapowany dysk. Nie chcę zakładać, że jeśli litera dysku jest już zmapowana, wskazuje na miejsce, którego oczekuję. Nie chcę też „zakładać”, że litera dysku jest dostępna, gdy mapuję dysk, a więc wiodące „*”.
użycie netto * \\ nasbox \ nazwa_udziału hasło / użytkownik: nazwa użytkownika / trwały: nie
Jaki jest właściwy sposób w moim skrypcie .bat, aby wyodrębnić tę literę dysku do użycia w kolejnych poleceniach? Myślałem, że mogę złożyć jakiś wariant analizy składniowej „for”, ale podejrzewam również, że musi istnieć łatwiejszy sposób niż ezoteryczna for-składnia.
C: \> wykorzystanie netto * \\ nasbox \ nazwa_udziału hasło / użytkownik: nazwa użytkownika / trwały: nie Dysk Z: jest teraz podłączony do \\ nasbox \ sharename. Polecenie zostało wykonane pomyślnie. C: \>
Po otrzymaniu zmapowanej litery dysku chciałbym wykonać polecenia w następujący sposób:
robocopy C: \ ścieżka \ do \ ważna \ stuff% NewDrive% \ ścieżka \ do \ backup / MIR / Z
Odpowiedzi:
Użyj poleceń
pushd
ipopd
.pushd \\server\share
utworzy dysk tymczasowy (zaczynając od Z: i cofając się, aż znajdzie dostępną literę) i przejdzie do niego. Gdy skończysz,popd
usunie dysk tymczasowy i przywróci Cię tam, gdzie byłeś.źródło
A dla potomnych, oto przybliżony szablon tego, jak to wszystko działa. Jeszcze raz dziękuję @Snark i @Neal.
Oto mój oryginalny szablon, używając pushd / popd.
Zauważ, że dzięki mojemu odkryciu z komentarza @ Neal, moja konkretna aplikacja pushd / popd nie jest tutaj potrzebna, a forma polecenia robocopy po prostu zmienia się na:
Nie ma potrzeby głosowania w tej sprawie. Chciałem mieć go tutaj jako bułkę tartą dla innych, którzy znajdą to później.
źródło