Wiecie co, kiedyś mnie tego uczono, były to „słodkie” czasy MS DOS 5.0 i 6.0 oraz takich cudeniek jak LOTUS 123, Norton Commander, Supaplex (hihihi) i pierwszego Wolfensteina. To dziwne coś to takie programowanie na niby. Tworzyliśmy plik tekstowy z rozszerzeniem „bat” (dzisiaj także z rozszerzeniem cmd), by sobie w czymś tam pomagać.





Dlaczego to działało? Otóż pliki te były nie tyle programem, co listą wywołań innych podprogramów lub części systemu operacyjnego. To były pliki wsadowe a w nich można było umieszczać różne polecenia. Główna lista poleceń była w pliku command.com, natomiast system MS-DOS (jak i późniejsze systemy) miały tajemnicze katalogi, w których można było umieszczać drobne podprogramy (system też je tam przechowywał). Pliki wsadowe wykonywały polecenia wewnętrzne, np. echo, cd, chdir, ale mogły też wywoływać zewnętrzne podprogramy, jak np. arj, pkzip czy xcopy.
Po co to było?
Otóż najogólniej to system MSDOS obsługiwało się poleceniami. Wprawdzie były różne nakładki graficzne wspomagające ale tak naprawdę obsługiwało się go komendami. Gdy chciałem sobie uruchomić grę zaraz po starcie systemu, czekałem aż na ekranie pojawi się linia komend (niektórzy nazywali to znak zachęty) wyglądało to tak:
c:\
potem musiałem (o ile miałem jakąś grę zainstalowaną) wejść do niej wpisując np. „cd gry” i enter, byłem już w katalogu „c:\gry\” potem wejść do samej gry wpisując „cd wolf3d” i enter, by wreszcie będąc w „c:\gry\wolf3d\” wpisać „runme.bat” i enter (tu mała uwaga, ja miałem „runme.bat” bo uruchamiałem grę z pewnymi ustawieniami ale to nie miejsce na wyjaśnienia). Gra się uruchamiała.
Kłopotliwe? Tak, więc można było uprościć i ręcznie wpisać całą linie ścieżki i pliku uruchomieniowego „c:\gry\wolf3d\runme.bat” ale i to było „niefajne” więc? Tworzyłem (i nie tylko ja) pliki wsadowe, które robiły to same i czasem nawet robiliśmy sobie z tego niezłą zabawę. Normalnie w katalogu głównym dysku tworzyło się plik „wolf.bat” (dla wtajemniczonych można było to zrobić inaczej, ale to może innym razem) w pliku tym były wszystkie potrzebne komendy czyli
@echo off
c:\
cd gry
cd wolf3d
runme.bat
teraz wystarczyło wpisać „wolf” i gra ruszała, proste? HAHA a myśmy jeszcze potrafili robić sobie dodatkowe głupoty:
echo off
cls
echo Uruchamiam terminal…
echo Terminal uruchomiony.
echo Uruchamiam dodatkową pamięć…
echo Pamięć uruchomiona.
echo Rozpoczynam nagrzewanie procesora…
echo Uwaga! Procesor ma niewystarczającą temperaturę!
echo Rozpoczynam otwieranie stosu z węglem…
echo Stos otwarty.
echo Dosypywanie węgla…
echo Węgiel dosypano na 11%.
echo Węgiel dosypano na 36%.
echo Węgiel dosypano na 57%.
echo Węgiel dosypano na 69%.
echo Węgiel dosypano na 100%.
echo Trwa wygrzewanie procesora…
echo Temperatura procesora optymalna.
echo Uruchamiam grę wolfenstein…
cls
echo ##############################
echo # #
echo # URUCHAMIAM WOLFENSTEIN #
echo # #
echo ##############################
rem Przejście do folderu gry i uruchomienie gry
cd gry
cd wolf
runme.bat
Między sobą robiliśmy nawet wymiany takich plików czy konkursy. Bawiliśmy się tym i to nieźle.
Co to powyżej oznacza?echo off – „chowało” znak zachęty by więcej nie pokazywał się znaczek np. „c:\” dodatkowo „@” przed echo chował znak zachęty także przy pierwszym poleceniuecho – wyświetlało jakiś tekst na ekranie („echo Trwa wygrzewanie procesora” pokazywało tekst „Trwa wygrzewanie procesora”cls – to komenda kasowania całego ekranu
Ktoś kto znał jeszcze inne ciekawostki, jak wyświetlanie nietypowych znaków (niedających się normalnie wprowadzić z klawiatury tworzył naprawdę niezłe „zabawki”, które cieszyły oko i … niewiele więcej

Przejdźmy do jeszcze innego archaicznego przykładu a potem zobaczmy jak to wykorzystać dzisiaj.
W tamtych czasach wszelkie dane przechowywaliśmy na dyskach twardych a przenosiliśmy je (pomiędzy komputerami) za pomocą dyskietek. Problem pojawiał się, gdy chcieliśmy przenieść więcej niż dyskietka potrafiła pomieścić (wtedy to było albo 360 kb albo 1.44Mb) służyły do tego programy kompresyjne (niektóre pewnie kojarzycie) „arj” „zip” „rar” „unrar” itp.

Wyglądało to tak dla kompresora ARJ:
@echo off
arj a -v1440 -r plik_archiwum.arj katalog_z_plikami\*
echo Pliki zostały skompresowane i podzielone na części 1.44 MB.
Skrypcik kompresował całą zawartość katalogu „katalog_z_plikami\*” np „c:\gry\wolf3D\ do pliku” „plik_archiwum.arj” jeżeli powstało więcej plików otrzymywaliśmy „plik_archiwum.arj, plik_archiwum.001 plik_archiwum.002 i tak dalej” Ta gwiazdka „*” to nie błąd a informacje dla programu kompresującego, że ma spakować wszystkie pliki bo nic nie stało na przeszkodzie by kopiować np tylko pliki na literę „A„ np katalog_z_plikami\a* lub tylko np zdjęcia katalog_z_plikami\*.jpg
Można było zmodyfikować plik wsadowy by wywoływać go np. „pakuj144.bat c:\gry\wolf3d i spakować całą grę wolf3d i podzielić na pliki po 1.44 (tu mała dygresja, lepiej było by parametr kompresji był niższy niż maksymalna pojemność dyskietki)
Możliwości TYSIĄCE a jak się miało dostęp do różnych innych małych programików to dało się „uszlachetnić” MSDOS wszelkiej maści „szmery bajery”
Teraz przejdźmy do współczesności
Ten mechanizm działa także w „Windowsach” a na Linuxach to już rozwiązanie wręcz o boskich możliwościach. W moim przypadku potrzebowałem stworzyć trochę katalogów, tyle ile jest liter w alfabecie.

Ręcznie by to trochę zajęło, ale w każdym z tych katalogów chciałem mieć podkatalogi i to kilka zajęło by to jeszcze więcej czasu. Zrobiłem sobie eksperyment i najpierw zrobiłem to za pomocą tylko „windowsowego” menażera plików oj trwało to! Potem zrobiłem to samo za pomocą TotalCommander (a szczycę się posiadać pełną licencyjną wersję! TAK dokonałem tego: zarejestrowałem TotalCommandera) było szybciej ale jako trzecią próbę wybrałem plik wsadowy!
I było o niebo szybciej! (licząc napisanie i uruchomienie). Jak to wygląda? Zobaczcie:
@echo off
set „letters=A B C Ć D E F G H I J K L Ł M N O P R S Ś T U W Y Z Ź Ż”
for %%L in (%letters%) do (
md „%%L\gfx”
md „%%L\media”
md „%%L\audio”
md „%%L\notatki”
md „%%L\pozostałe”
)
pause
i jak się domyślacie skrypt tworzy katalogi o nazwach liter a w każdym z nich dodatkowe podkatalogi. Dodam, że warto dopisać na początku (po echo off)
chcp 65001 > nul (to jest przydatne, gdy spodziewacie się, że coś zmieni Wam kodowanie znaków (zwłaszcza polskich specjalnych) Latin, UTF itp
setlocal enabledelayedexpansion (to jest przydatne, jak macie duuużo plików wsadowych i czasem jednie z nich wywołują inne (komenda „call”) Ale Was to raczej nie będzie dotyczyć (ja sam dość rzadko się tak zabezpieczam). A Czy tylko można tworzyć katalogi? hehe możecie praktycznie wszystko!
Załóżmy, że masz ważne dokumenty w folderze C:\Dokumenty, które chcesz regularnie kopiować na zewnętrzny dysk, np. D:\Backup, i dodatkowo przesyłać do chmury (przykładowo, do katalogu Dropbox). Możemy użyć pliku wsadowego, który skopiuje dane na oba nośniki w prosty sposób (uwaga nie sprawdzałem czy kod działa w 100% poprawnie, potraktujcie to raczej jako algorytm).
@echo off
rem Sprawdzenie, czy katalog backupu istnieje
if not exist D:\Backup (
echo Dysk zewnętrzny nie jest podłączony lub katalog D:\Backup nie istnieje.
goto end
)
rem Kopiowanie plików do zewnętrznego dysku
xcopy C:\Dokumenty* D:\Backup\ /E /I /Y
echo Kopia zapasowa do zewnętrznego dysku wykonana.
rem Sprawdzenie, czy katalog Dropbox istnieje
if not exist C:\Users\%username%\Dropbox\Backup (
echo Katalog Dropbox nie istnieje. Sprawdz, czy Dropbox jest zainstalowany i skonfigurowany.
goto end
)
rem Kopiowanie plików do Dropbox
xcopy C:\Dokumenty* C:\Users\%username%\Dropbox\Backup\ /E /I /Y
echo Kopia zapasowa do Dropbox wykonana.
:end
echo Proces kopii zapasowej zakończony.
pause
Sprawdzenie, czy istnieje katalog:
if not exist D:\Backup: Sprawdza, czy dysk zewnętrzny z katalogiem do kopii zapasowej jest podłączony. Jeśli nie, skrypt przerywa działanie.if not exist C:\Users\%username%\Dropbox\Backup: Sprawdza, czy użytkownik ma zainstalowanego i skonfigurowanego Dropboxa. Jeśli nie, skrypt przerywa działanie.
Kopiowanie plików:
xcopy C:\Dokumenty\* D:\Backup\ /E /I /Y: Komendaxcopykopiuje wszystkie pliki i foldery z C:\Dokumenty do katalogu D:\Backup. Przełączniki:/E: Kopiuje wszystkie podkatalogi, także puste./I: Jeśli katalog docelowy nie istnieje, tworzy go./Y: Zastępuje pliki bez pytania o potwierdzenie.
- Podobnie działa kopiowanie do katalogu w Dropboxie.
Powiadomienia o sukcesie lub błędzie:
Skrypt informuje o powodzeniu kopii zapasowej lub o błędzie, jeśli nie podłączono dysku zewnętrznego lub Dropbox nie jest skonfigurowany.
A najlepsze jest to, że taki plik wsadowy możecie podpiąć pod windowsowy Harmonogram zadań (Task Scheduler) i uruchamiać automatycznie raz dziennie, raz w tygodniu czy za każdym razem jak wyłączacie komputer. Nieźle? To powiem, Wam, że w Windows jak i dawniej w MSDOS wszystkie komendy można było użyć w plikach wsadowych do tego można uruchamiać jednym plikiem inne a także uruchamiać całe sekwencje różnych programów
Pliki wsadowe, choć wyglądają na coś z przeszłości, wciąż mają wiele do zaoferowania, zwłaszcza dla użytkowników, którzy lubią mieć pełną kontrolę nad swoim systemem. Od automatyzacji kopii zapasowych po bardziej złożone zadania – to narzędzie jest wciąż aktualne. Wystarczy spojrzeć na współczesne instalatory aplikacji, które bardzo często wykorzystują pliki wsadowe do automatyzacji procesów. Nawet zaawansowane programy, takie jak XAMPP (serwer Apache, PHP i MySQL), używają ich do uruchamiania i konfiguracji swoich usług. Niektóre z tych skryptów mają setki, a nawet tysiące linii kodu, co pokazuje, że pliki wsadowe to już nie tylko kilka prostych poleceń.

Pliki wsadowe są również często uruchamiane przy starcie skomplikowanych programów, aby skonfigurować środowisko, uruchomić usługi czy zautomatyzować skomplikowane procesy. Warto je docenić, bo choć są często „niewidzialne” dla zwykłego użytkownika, to nadal mają ogromne znaczenie.
Jak to kiedyś mówiono, „programowanie na niby” ma swoje zastosowania, nawet dzisiaj. Wystarczy trochę kreatywności i cierpliwości, a efekty mogą być zaskakująco użyteczne.
Pokazałem naprawdę pobieżnie dawne czasy i współczesne, i nie ukrywam pominąłem wiele naprawdę wiele aspektów zagadnienia. Jeżeli jesteście zainteresowanie Rzućcie okiem, na poniższe linki, może się Wam przydadzą:
- https://pl.wikipedia.org/wiki/Plik_wsadowy
- https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/help
- https://www.thomas-krenn.com/pl/wiki/Komendy_wiersza_polece%C5%84_systemu_Windows
- https://winiso.pl/poradniki/polecenia-cmd/lista-komend-wiersz-polecen
- https://archive.org/details/microsoft-ms-dos-6
- https://archive.org/details/ms-dos-6.22-users-guide
- https://archive.org/details/microsoftmsdosu00micr
Do następnego artykułu
Aleksander Marcin Sanetra
