Dzisiaj krótka porada dotycząca używania wiersza poleceń w najnowszym systemie Microsoftu.
Linia poleceń jest zapewne świetnie znana wszystkim użytkownikom wszelkich dystrybucji Linuxa. Natomiast niewiele osób korzysta z tego narzędzia w systemach Windows. Jest to błąd ponieważ umiejętne wykorzystanie wiersza poleceń może bardzo ułatwić i przyspieszyć pracę.
Przykład wykorzystania opiszę na podstawie problemu jaki spotkałem w ostatnim czasie i rozwiązałem go właśnie za pomocą tego przydatnego, a często pomijanego elementu systemu operacyjnego.
Problem
Otóż niedawno musiałem szybko zmienić nazwy kilkudziesięciu plików tekstowych równocześnie. Nie będę tutaj opisywał dlaczego chciałem to zrobić bo nie jest to w tym momencie istotne.
Wyobraźmy sobie zatem taką sytuację: w pewnym folderze znajduje się kilkadziesiąt plików tekstowych o różnych nazwach. Sytuację obrazuje poniższy zrzut ekranu:
Wyobraźmy sobie, że użytkownik (w tym wypadku ja) chce zmienić nazwy plików w taki sposób: 01.txt, 02.txt, 03.txt… Oczywiście można to zrobić ręcznie i zmieniać nazwy po kolei. Jednak mi zależało na czasie oraz chciałem mieć potem szybką możliwość zmiany numeracji plików (na przykład od piątki). Co można zrobić w takim wypadku? Ano, skorzystać właśnie z wiersza poleceń oraz z prostego skryptu, który napiszemy za moment w pliku .bat (kto jeszcze pisze skrypty w Windowsie!).
Rozwiązanie
Nasz skrypt uruchomimy właśnie w wierszu poleceń. Postarajmy się go zatem uruchomić w naszym folderze. I tutaj pierwsza porada.
Porada nr 1: Aby uruchomić wiersz poleceń w Win10 wpisujemy po prostu w pasku ścieżki: cmd. W starszych systemach możliwe było to często po kliknięciu PPM z wciśniętym klawiszem shift, natomiast w Win10 pozwoli to jedynie na uruchomienie PowerShella, który nie jest już tak wygodny w użyciu, ale dla porządku dodam że ma wielu zwolenników. Stosuje się tam troszkę inną składnię niż w klasycznym wierszu poleceń, a same polecenia nieco się różnią. Może kiedyś zrobię osobny wpis właśnie o PowerShell.
Powracając do naszego wiersza poleceń to załóżmy, że już go uruchomiliśmy:
Oczywiście wszystkie nasze rozkazy moglibyśmy wprowadzać bezpośrednio tutaj. Jest to jednak mało wygodne. Aby cały proces zautomatyzować, tworzymy pusty plik tekstowy (ja nazwałem go skrypt) i zaczynamy go wypełniać niezbędnym kodem. Ja po prostu wrzucę tutaj kod skryptu aby każdy mógł się nim pobawić samodzielnie. Wytłumaczę jedynie mniej jasne fragmenty.
@echo off
SetLocal EnableDelayedExpansion
set i=0
for %%a in (*.txt*) do (
if !i! LSS 10 (
ren "%%a" "0!i!.txt"
)
if !i! GEQ 10 (
ren "%%a" "!i!.txt"
)
set /A i=i+1
echo !i!
)
:End
Jakie polecenia widzimy w skrypcie? Po pierwsze wyłączmy w nim echo aby nie zaśmiecać sobie wiersza poleceń w trakcie pracy skryptu. Kolejne polecenie (SetLocal EnableDelayedExpansion) pozwala nam na korzystanie ze zmiennych (w naszym przypadku “i”) wewnątrz pętli. Tak, wiem że jest to niejasne, szczególnie dla osób mających styczność z programowaniem, ale w przypadku komend w Win takie zabiegi będą częste. Następnie pobieramy w pętli for wszystkie pliki typu .txt znajdujące się w folderze i za pomocą polecenia ren oraz prostych wyrażeń regularnych, podmieniamy ich nazwy na takie jakie sobie życzymy. W moim przypadku chciałem aby skrypt ponumerował mi pliki w formacie: 01.txt, 02.txt … 15.txt itd. Dlatego zastosowałem w pętli for dwa warunki. Jeden działa kiedy mój iterator jest mniejszy od 10 i wtedy musimy do nazwy dodać prefiks w postaci zera. Jeżeli jest inaczej to z prefiksu rezygnujemy. W przypadku sprawdzania czy “i” jest większe bądź mniejsze od 10 zastosowałem polecenia: GEQ (greater equal) oraz LSS (less). Dlaczego tak? Ponieważ operatory “<” oraz “>” są zarezerwowane przez wiersz poleceń na przykład dla znaku zachęty. Tutaj kolejny zgrzyt dla programistów, kto jednak powiedział, że wszystko musi być takie jasne i oczywiste 🙂 Wracając do naszego skryptu, widzimy jeszcze jedną dziwną rzecz. Mianowicie wszędzie gdzie odwołuję się do zmiennej “i”, umieszczam ją pomiędzy znakami “!”. Kolejna dziwna sprawa – taki rodzaj odwołania sprawia, że możemy się odnieść do zmiennej będącej niejako lokalną zmienną skryptu. Sami przyznacie, że jest tutaj dużo dziwnych mechanizmów. Znanym poleceniem echo wypisuję sobie jeszcze iterator w konsoli i w zasadzie jest to już koniec skryptu.
No dobrze, skrypt napisany (pamiętamy aby zmienić jego rozszerzenie na .bat), pozostaje zatem go uruchomić. Poniżej efekt działania:
Widzimy, że dosłownie w sekundę udało nam się zmienić nazwy plików w folderze w taki sposób jak tego chcieliśmy.
Podsumowanie
Mam nadzieję, że wpis okaże się przydatny. Jego celem było pokazanie możliwości systemu o jakich często zapominamy. Czasami po prostu warto wrócić do poczciwego wiersza poleceń. Zachęcam do samodzielnej zabawy i modyfikowania skryptu, a także szerszego zastosowania linii poleceń także w systemie Windows. Oczywiście zachęcam także do komentowania i dzielenia się swoimi pomysłami na wykorzystanie tego narzędzia.
Ciekawe będzie także porównanie tych narzędzi w Windowsie oraz Linuxie. Oczywiście w tym drugim linia poleceń i pisanie skryptów jest dużo bardzie przejrzyste, co sam pierwszy przyznam 🙂 Lecz to już materiał na całkiem inny wpis.
Można też z poziomy Exploratora windows:
1. Ctrl+A
2. F2
3. Wpisać 0
4. Nacisnąc enter
🙂
Powodzenia