SUBST – metoda na mapowanie katalogu (dowiązanie ścieżki) w Windows

Myślę, że mogę poprowadzić w końcu swój kanał także w kierunku w którym miał zmierzać od zawsze – by prócz gier także uczył.

A zatem możemy zacząć nową przygodę. Będę tu opisywać różne dziwne metody radzenia sobie z zagadnieniami z którymi możesz mieć do czynienia.

== MAŁE WPROWADZENIE ==

W linuksie istnieje coś takiego jak komenda “LN” (przykład z wikipedii) pozwalająca tworzyć dowiązania czyli tak “przypiąć jedno miejsce” gdzie indziej – tłumacząc to na język windowsa mogliśmy dla przykładu w układzie katalogów moich dokumentów stworzyć katalog “obrazy”, który w rzeczywistości zawierał połączenie ze zdalnym serwerem na którym trzymamy obrazy i widzielibyśmy go jako zwykły katalog niczym nie odbiegającym od innych.

 

W systemie Windows istnieje podobne narzędzie i nazywa się “SUBST” (opis z wikipedii) i możemy je wykorzystać do własnych potrzeb by ułatwić sobie życie a w szczególności zapanować nad nieporządkiem a także utworzyć historię swoich zmian co w rzeczywistości może ci się przydać w przyszłości by móc cofnąć się w przeszłość…

 

Trochę o mnie. Na codzień pracuję jako informatyk nadzorując bazy danych, serwery aplikacyjne doglądając systemów operacyjnych maszyn. W większości są to maszyny z linuksem na pokładzie, nieco unixowych i garstka z windowsem. Całość jednak jest przeze mnie zarządza z maszyny z Windows, głównie za pomocą terminali tekstowych (putty / mobaxterm) oraz klientów SQL (SQL Developer, TOAD). Każdego dnia stykam się z nowymi problemami wynikłymi zarówno z bieżących zdarzeń w podległych systemach, zmian i potrzeb dyktowanych rozwojem środowisk jak i też tych zgłaszanych przez użytkowników końcowych. Praktycznie wszystkiego co obecnie wiem nauczyłem się samodzielnie. Jeśli trafiam na jakiś problem staram się go rozwiązać. Jeśli coś jest mi potrzebne a ja tego nie umiem… to siadam, kombinuję i uczę się by móc sobie z nim poradzić w ten czy też inny sposób… W większości przypadków się udaje – tak lub inaczej 😉

 

To powoduje, że cały czas pracuje się na różnych dokumentach i przetwarza różnorodne dane. Te trzeba gdzieś składować. O ile swoje zapiski i notatki trzymam w jednym miejscu o tyle napływające na bieżąco dokumenty zapisuję w jedno miejsce, do jednego katalogu. Jest to dysk “T:\” prowadzący tak naprawdę do katalogu z datą bieżącego dnia – np. “D:\TEMP\AKTUALNE\2018-05-16“. Kolejnego dnia utworzę katalog o nazwie daty następnego dnia. I tak dalej.

 

Jak patrzę, to moje bieżące archiwum zawiera rok 2015 i następne. Na innym dysku przewalają się natomiast katalogi jeszcze z 2007 roku. Nie trzymam w nich wszystkich plików jakie się przetoczyły przez moje ręce tego dnia. Kasuję wszystkie większe pliki (co najwyżej zostawię po nich pusty katalog) oraz wszelkie zrzuty z baz danych czy też pliki z logami. Roczne “archiwa” utworzone w ten sposób zajmują około 1,5 – 5GB. Z pewnością dałoby się je jeszcze odchudzić tyle, że jakoś nigdy nie mogę na to znaleźć czasu. Leży to leży – jeść nie woła…


 

 

== W JAKI SPOSÓB TO DZIAŁA ==

W Windows poleceniem SUBST możemy utworzyć wirtualny napęd, który prowadzi do przypisanego katalogu z jakiejś ścieżki (z innego dysku – lub nawet z innego wirtualnego napędu). Dzięki temu widzimy go jako odrębne urządzenie (dysk) co skraca nam konieczność przegrzebywania się przez dziesiątki katalogów by zapisać dany plik z jakiejś aplikacji właśnie do niego. Zapisujemy go wtedy bezpośrednio do naszego napędu (np. T:\) i plik magicznie ląduje w docelowym katalogu. Jeśli każdego dnia będziesz tworzyć nowy katalog i do niego zapisywać dane – utworzysz w końcu historię swojej aktywności. Przede wszystkim ułatwia to strasznie robotę – w oknie zapisywania plików wpisuję “T:\plik” i niezależnie od tego gdzie ustawiona jest bieżąca ścieżka w requesterze plików (czyli w którym katalogu jesteśmy zakopani) od razu wrzuca nam ten “plik” do naszego katalogu.


 

 

== POTENCJALNE PROBLEMY ==

W trakcie używania tego sposobu przez poprzednie lata bardzo rzadko napotykałem problemy związane z działaniem właśnie w ten sposób.

  • sporadycznie jakiś program miał problem z zapisaniem do takiej ścieżki (ale naprawdę rzadko się to działo – obecnie nie jestem sobie nawet w stanie przypomnieć kiedy po raz ostatni miało to miejsce) komunikując błąd.
  • niektóre programy (jak np. Directory Opus którego używam zamiast eksploratora windows jako managera plików) po zmianie kolejnego dnia ścieżki na nową nie widzą w niej zmian (trzeba ręcznie odświeżać zawartość). Pomaga zamknięcie okna z katalogami i otwarcie go ponownie. Eksplorator windows nie ma z tym żadnych problemów.

 

 

== W JAKI SPOSÓB UŻYWAĆ SUBST? ==

By polecenie zadziałało poprawnie musimy przypisać mu NIEUŻYWANĄ literę dysku. Dla przykładu nie mamy żadnego napędu podłączonego jako dysk (wolumen) “O:\“. Możemy przypisać mu dowolny z katalogów do których mamy prawa dostępu jako bieżący użytkownik. Należy wykonać następujące kroki:

1.Wejść do docelowego katalogu który chcemy przypisać jako literę dysku. W moim przypadku jest to “D:\!___Archiwum___!” w którym znajduje się także katalog “!___MOJE___!“. (linuksowcy was zabiją za katalogi z wykrzyknikami na początku XD)

 

2. Przypisać literę dysku do bieżącego katalogu. Można to zrobić na dwa sposoby:

  • SUBST O: .
    – będąc w bieżącym katalogu przypisać go poprzez użycie kropki “.”
  • SUBST O: “D:\!___Archiwum___!”
    będąc gdziekolwiek przypisać go podając pełną ścieżkę – najlepiej podać ją w cudzysłowiu co pozwoli pominąć problemy ze ścieżkami posiadającymi dziwne litery lub spacje.

 

3. Gdy teraz sprawdzimy napędy dyskowe to okaże się, że został dodany jeden więcej. Zwróć uwagę, że odziedziczył on nazwę oraz miejsce oryginalnego napędu. W niczym to nie przeszkadza ponieważ i tak będziemy się posługiwać nazwą skróconą (“O:\“)

 

4. Jeśli do niego wejdziemy i sprawdzimy co jest w środku, to będzie w nim ten mój katalog “!___Moje___!” – tak jak być powinno.

 

5. Sprawdzając to samo z linii komend dostaniemy dokładnie tą samą treść:


 

 

== JAK Z TEGO KORZYSTAĆ? ==

Korzystanie z tego rozwiązania jest bajecznie proste. Jeśli dana aplikacja chce zapisać plik, który docelowo ma wylądować w zdefiniowanym przez nas napędzie “O:\” czyli w rzeczywistości w ścieżce “D:\!___Archiwum___!” możemy to zrobić na dwa sposoby:

  1. Po prostu wpisać nazwę pliku poprzedzając go literą napędu – czyli “O:\plik1”. Plik zostanie od razu tam zapisany.
  2. Jeśli najpierw chcemy jednak sprawdzić co jest już w tym katalogu, wpisujesz jego nazwę (“O:\” lub po prostu “O:”) i zostaniesz najpierw do niego przeniesiony.

3.  Gdy teraz sprawdzimy zawartość (po zapisaniu pliku) dysku O:\ to nasz plik1.png już tam jest 🙂

4. W rzeczywistości dzięki dowiązaniu katalogu jako napędu został zapisany w żądanym przez nas podkatalogu:


 

 

== AUTOMATYZACJA ==

Wszystko ładnie i pięknie, ale ręczna dłubanina i wpisywanie tych katalogów będzie trochę męczące (nawet biorąc pod uwagę, że robimy to max raz na dobę). Czy można to zautomatyzować, by zakładało się bądź automatycznie bądź za pomocą odpalanego skryptu? Oczywiście.

I u miałem małą zagwozdkę robiąc ten poradnik. Opiszę dwa przypadki:

 

Wątek pierwszy. W pracy używam Windowsa 10 (jakiejś wcześniejszej wersji) i tam po prostu jeśli chcę zmienić ścieżkę po prostu odpalam prosty skrypt “nazwa.bat” który tworzy nowy katalog z bieżącą datą (np. “2018-05-17“) i przepina wskazany wolumen do nowo utworzonego katalogu. Wygląda on tak:

cd D:\TEMP\_W_\AKTUALNE
mkdir %date%
subst t: /d
subst t: %date%

 

Wątek drugi. Tworząc ten poradnik nieco się zdziwiłem ponieważ opisana powyżej metoda nie działa. Odpalając go dnia 2018-05-17 zamiast katalogu o tej dacie utworzyło mi katalog “17.05.2018” co jednak nie jest tym czego bym oczekiwał. Ustawienia regionalne daty się w tej nowej wersji Windowsa zmieniło – czy jak? Nie wnikałem. Napisałem po prostu nowy skrypt.

set katalog=%date:~6%-%date:~3,2%-%date:~0,2%
mkdir D:\TEMP\N\AKTUALNE\%katalog%
subst N: /D
subst N: D:\TEMP\N\AKTUALNE\%katalog%

 

Co konkretnie robi?

  • pod zmienną “katalog” przypisuje bieżącą datę w formacie “YYYY-MM-DD” – czyli rok-miesiąc-dzień. 2018-05-17 – dokładnie tego potrzebowałem.
  • mkdir – w ścieżce “D:\TEMP\N\AKTUALNE\” tworzy katalog o nazwie bieżącej daty (czyli “2018-05-17“).
  • subst z parametrem “/D” usuwa wolumen “N:\” – o ile istnieje. Pod tą literką przypisałem akurat ten katalog w tym przykładzie.
  • subst przypisuje wolumen “N:\” do naszej ścieżki – czyli “D:\TEMP\N\AKTUALNE\2018-05-17“.

 

Wystarczy go odpalić i utworzy nam właściwy katalog i przypisze doń napęd o wskazanej literze.

  • Kilkukrotne uruchomienie skryptu nie robi problemu (o ile nie nastanie w tym momencie nowy dzień ponieważ zmieni się bieżąca data 😉
  • Jeśli jakiś program akurat czyta z pliku który znajduje się w tej ścieżce – czy też do niego akurat zapisuje dostanie błąd odczytu/zapisu.
  • Pamiętaj, że korzystasz w ten sposób z ostatnio utworzonego katalogu. Jeśli stworzyłeś go 3 dni temu – on nadal będzie istniał i to do niego będziesz zapisywać (to od ciebie zależy kiedy to finalnie przepniesz “na dziś”).

== DLACZEGO NAZWA KATALOGU JEST WAŻNA? ==

Ktoś zapyta – dlaczego tyle walczyłeś z nazwą katalogu skoro i tak nie ma ona znaczenia gdy dostajesz się do zawartości tego katalogu poprzez literę? Otóż dla bieżącego użycia nie ma to znaczenia. Nazwa katalogu jest nam totalnie obojętna na chwilę obecną, jest ona całkowicie transparentna. Ale znaczenie będzie to miało po kilku dniach.

Wraz z katalogiem przypisywanym jako wolumen, tworzonym dzień po dniu po jakimś czasie w katalogu w którym tworzymy nasz wirtualny napęd będziemy mieć sytuację widoczną na poniższym obrazku. Przy zastosowaniu zaproponowanej przeze mnie konwencji struktura tworzonych katalogów układać się będzie po nazwach co jest niezmiernie wygodne. W przeciwnym wypadku uzyskalibyśmy coś takiego – dni będą się mieszać z miesiącami…


 

 

== PEŁNA AUTOMATYZACJA ==

Jeśli zaczniesz korzystać z opisanego przeze mnie rozwiązania zapewne z czasem zadasz sobie kolejne pytanie – czy można to jeszcze ułatwić? Tak, by na przykład katalog z bieżącą datą uruchomienia komputera tworzył się samoczynnie? Da się… Zapisz gdzieś prezentowany wcześniej skrypt (zm

 

  1. Uruchom Harmonogram zadań.

 

2. W sekcji “Akcje” kliknij na “Utwórz zadanie“.

  • Nadaj nazwę zadaniu
  • Możesz ustawić by skrypt działał tylko dla konkretnego użytkownika
  • W moim przypadku ustawiłem by uruchomił się tylko przy logowaniu do konta

 

 

3. W zakładce “Wyzwalacze” utwórz nowy wyzwalacz.

  • W moim przypadku zadziała on przy logowaniu użytkownika o nazwie TATA na bieżącym komputerze (o nazwie PECET).
  • Oczywiście wyzwalacz jest włączony.

 

 

4. W zakładce “Akcje” tworzymy nową akcję by uzyskać coś takiego:

  • Akcja to “Uruchom program
  • Program który zostanie uruchomiony to mój skrypt wykonywalny z nazwie “sciezka_w.bat” znajdujący się na dysku “E:\”. Oczywiście musisz kliknąć na “Przeglądaj” i dokopać się do swojego skryptu i wskazać go.

 

Przy reszcie zakładek nie miałem konieczności grzebać. Zapisujemy nowe zadanie harmonogramu. Oczywiście ja zrobiłem to rozmyślnie by uruchamiało mi się tylko przy zalogowaniu się do konta (odpaleniu komputera). Możesz ustawić inne warunki – np. by bezwzględnie z nastaniem północy ścieżka była zmieniana itp. – zrób jak ci wygodniej (ale pamiętaj, że jeśli jakoś program akurat korzysta z otwartych stamtąd plików, dostanie błędem po oczach).

 

Jeśli kiedykolwiek będziesz chciał je wyłączyć czy też coś poprawić, to znaleźć je możesz w ten sposób:

  • Klikasz (2x) na “Harmonogram zadań (Lokalny).
  • W aktywnych zadaniach odnajdujesz swoją nazwę zadania i klikasz na niej.

 

Otworzy się nowe okno – w którym należy kliknąć na “Właściwości” by przejść do edycji zadania.


 

== ZAKOŃCZENIE ==

I to tyle. Przy każdym zalogowaniu się do komputera zostanie utworzony katalog z bieżącą datą do którego zostanie przypisana ustalona przez nas ścieżka, która następnie będzie dostępna jako wolumen. Korzystam z tego od lat i szczerze polecam. Co jakiś czas jednak przejrzyj pozostawiony przez ciebie śmietnik ponieważ oczywiście utworzone / zapisane tam przez ciebie pliki nadal będą tam istnieć.

Dorzucam ci także archiwum ze skryptem “.bat” użytym w poradniku: http://hakimodo.pl/INNE/INNE/technicznie/17/sciezka_w.7z

 

Co to daje? Chwila – czy ja czasem 3 dni temu nie edytowałem takiego pliku? Wchodzisz… i masz. Miłej zabawy.

Zapraszam do komentowania. Czy chcecie więcej opisów podobnych rozwiązań?