Popraw hurtem spacje na _ w DOS[!]

Ostat­nio nie mam za dużo czasu na pisa­nie (praca i studia pody­plo­mowe). Mam za to mały rary­ta­sek dla „doso­wych oldscho­olow­ców”. Na potrzeby ułatwie­nia sobie pracy napi­sa­łem mały skrypt w DOS (czy raczej w tym co jest w zamian w Win XP). Wiedzę czer­pa­łem oczy­wi­ście z Google i pole­ce­nia cośtam /?

Co to robi? Zamie­nia nazwy wszyst­kich podka­ta­lo­gów zastę­pu­jąc spacje podkreśl­ni­kami _. Dodat­kowo pomija podane przez nas podka­ta­logi. Miej­cie świa­do­mość, że skrypt należy dosto­so­wać do swoich wyma­gań. To co tu jest działa u mnie, a u Was niekoniecznie.

Zawar­tość pliku szukaj_spacji.bat:

@ECHO OFF
CLS
ECHO. Tworzenie listy plikow z podkatalogami...

c:
CD \katalog

:spacje
REM pobierz liste katalogow pomijajac te podane w nawiasach
DIR /AD /B /S | FINDSTR /V "skrypty rozdzielone" > katalogi.txt

REM sprawdzam czy sa spacje w nazwach
FOR /F "delims=" %%k IN (katalogi.txt) DO (
ECHO %%k|FINDSTR /R /C:" ">nul
IF NOT ERRORLEVEL 1 CALL .\skrypty\popraw_spacje.bat "%%~pk%%~nk"&GOTO spacje
)

ERASE c:\katalog\katalogi.txt

Zawar­tość pliku popraw_spacje.bat:

@ECHO OFF

IF (%1) == () (
ECHO Mowilem nie uruchamiac samemu!
PAUSE
GOTO :EOF
)

FOR /F "tokens=1*" %%a IN (%1) DO rename %1 "%%a_%%b"

Jak to działa:

  1. kasuj wyświe­tla­nie komunikatów,
  2. czyść ekran,
  3. wyświetl komu­ni­kat na ekranie,
  4. przejdź do miej­sca, w którym będą szukane podka­ta­logi do zmiany nazwy,
  5. utwo­rzórz etykietę spacje, do której możemy wyko­nać później skok,
  6. pole­ce­niem DIR wyświe­tlamy nazwy podka­ta­lo­gów w formie uprosz­czo­nej (bez poda­wa­nia ich wiel­ko­ści itp.), następ­nie jedziemy na „oszu­ka­nej pajpie” Billa G.: DIR prze­ka­zuje swoje wyjście na wejście FINDSTR z para­me­trem /V, dzięki temu zapi­suje do pliku katalogi.txt nazwy wszyst­kich podka­ta­lo­gów oprócz tych poda­nych w cudzy­sło­wach (FINDSTR nie jest potrzebny jeżeli nie chcemy pomi­jać jakichś podkatalogów),
  7. pętla FOR z para­me­trem delims wymu­sza itera­cje wraz z końcem linii, a nie tak jak domyśl­nie każdej spacji,
  8. znowu pipe: ECHO prze­ka­zuje swoje wyjście na wejście FINDSTR, które tym razem szuka spacji w nazwie; jeżeli coś znaj­dzie i tak wywa­lane jest do nul (chodzi nam o wyge­ne­ro­wa­nie ERRORLEVEL czy znalazł spacje czy nie),
  9. jeżeli znalazł spacje (działa jedy­nie knif NOT ERRORLEVEL 1), to wywo­łuje plik popraw_spacje.bat prze­ka­zu­jąc mu jako para­metr ścieżkę dostępu i nazwę kata­logu do zmiany nazwy,
  10. po popra­wie­niu spacji wymu­szany jest skok do kolej­nego wyge­ne­ro­wa­nia listy kata­lo­gów i tak aż do popra­wie­nia ostat­niej spacji w drze­wie katalogów,
  11. kasuje plik txt z nazwami katalogów

Co robi wywo­ły­wany plik popraw_spacje.bat:

  1. Spraw­dza czy są podane jakieś argu­menty, jeżeli nie, to wyświe­tla komu­ni­kat i za pomocą GOTO :EOF skacze na koniec pliku nie robiąc nic.
  2. Podany ciąg znaków zostaje rozdzie­lony na 2 kawałki w miej­scu spacji, którye „skleja” znakiem _.

Wnio­ski z całej tej zabawy:

  • DOS jest strasz­nie toporny. Rolę funk­cji najle­piej speł­niają osobne pliki bat, które coś tam wyko­nują i wracają w miej­sce wywo­ła­nia. Stosu­jąc etykiety i GOTO często nara­żasz się na nieskoń­czone pętle (a wtedy pomaga tylko CTRL + C).
  • Na każdym kroku trzeba stoso­wać knify wyna­le­zione metodą prób i błędów lub żmud­nego prze­szu­ki­wa­nia forów inter­ne­to­wych. Czy Bill G. od początku tak to sobie wykombinował?
  • Dlaczego „oszu­kana pajpa”? W syste­mach unik­so­po­dob­nych kolejne wier­sze z wyjścia prze­ka­zy­wane na wejście następ­nego pole­ce­nia urucha­miają równo­le­gły proces. W DOS wszyst­kie wier­sze są najpierw zapi­sy­wane do pliku tymcza­so­wego, a dopiero potem prze­ka­zy­wane do następ­nego polecenia.
  • Nigdy więcej DOSa :-)

Podobne wpisy:

  1. Weź mi zrób proce­sor tekstu cz. 2 / 2
  2. SubE­dit i podwójne napisy
  3. Napra­wia­nie formatu napi­sów do filmu za pomocą Open Office
  4. Stan­dardy kodo­wa­nia zgodne z Zend, cz. 1/3

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <p> <pre lang="" line="" escaped=""> <q cite=""> <strike> <strong>