Batch
W 1.Komedny 4.Kierowanie strumieniami danych 1.Komedny i ich znaczenie
"Echo"-kieruje strumień danych na urządzenie (ekran, plik, drukarka), wyświetla napisy, zmienne i wyniki operacji.
Na razie starczy dla początkujących, znając te komendy można bez problemu napisać batch`a.
2.Przykłady
-Pisanie batch`y
Nasz pierwszy batch będzie czyścił ekran, wyświetlał komunikat, czekał na klawisz, wyświetlał
pliki, tworzył katalogi i je usuwał.Nie będę pisał komentarzy, ponieważ jeżeli czytaliście dokładnie informacje wyżej zamieszczone bez trudu wszystko zrozumiecie!
Aby program zadziałał musi mieć rozszerzenie *.bat,więc nadajcie mu nazwę np.Batch.bat
Można go pisać w edicie, notatniku , itp.
Teraz sporządzimy bardziej przydatny program :-), będzie posiadał skromne menu i wykonywał pewne funkcje:
3.Parametry i zmienne
Teraz zajmijmy się parametrami i zmiennymi:
Aby nasz skrypt mógł przyjmować parametry z zewnątrz (z linii poleceń) np. print.bat -text www.otul.prv.pl musimy w skrypcie obsłużyć parametry.
W batch`u parametry oznaczamy %x (x-cyfra) tzn. %0 - parametr nazwa programu, %1 - pierwszy parametr (tu "-text"), %2 drugi parametr (tu "www.otul.prv.pl").
Należy pamiętać że każdy parametr oddzielony jest spacją i taki wpis print -text Otul www
oznacza dla skryptu %2=Otul, %3=www, także dla jednolitego tekstu należy stosować "_" zamiast spacji i jeszcze jedno batch obsługuje jednoczasowo tylko 10 parametrów. Istnieje polecenie Shift powodujące przesunięcie wszystkich parametrów w lewo, co zwalnia miejsce na następny, lecz kasuje poprzedni. Jeżeli mamy w programie trzy parametry: %0 - zawiera nazwę pliku, %1 - otul, %2 - batch, to po wykonaniu komendy Shift będzie to wyglądać następująco: %0 - otul, %1 - batch, %2 - pusty.
Wspomniałem o zmiennych, aby je wprowadzić do programu używamy polecenia set np. set
autor=OTUL i od tej pory zmienna %autor% (tak piszemy w batch`u) ma wartość OTUL, ale możemy
ja zmienić pisząc set autor=OtulOC, liczba zmiennych jest prawie nieograniczona. Aby wyświetlić wszystkie zmienne jakie są zadeklarowane należy wpisać Set bez parametrów.
Teraz powinniśmy sprawdzić to w praktyce, wykonamy odpowiedni skrypt z obsługę błędów w razie niepoprawnego parametru.
4.Kierowanie strumienia danych
W tym miejscu zajmiemy się operatorami kierowania, w batch używanymy ">", ">>", "|", "<" i "<<". Pierwsze dwa służą do kierowania wyników operacji np. do pliku lub niczego (nul) np. Chcemy zapisać ilość wolnego miejsca wraz z kilkoma informacjami o dysku C: do pliku cinfo.txt piszemy wtedy CHKDSK c > cinfo.txt , to spowoduje utworzenie nowego pliku i przepisanie do niego operacji wykonanej przez program CHKDSK. Operator kierunkowy ">>" powoduje dodanie (doklejenie) wyniku operacji już do istniejącego pliku. Jeżeli po wykonaniu powyższej komendy wpiszemy jeszcze raz CHKDSK c > cinfo.txt stary plik zostanie nadpisany. Natomiast gdy wpiszemy CHKDSK c >> cinfo.txt dodamy kolejny wynik operacji programu CHKDSK, będzie on się znajdował pod starym.
Operator "|" służy do równoległego wykorzystywanie dwóch komend (programów) np. Jeżeli chcemy zapisać informacje o pamięci komputera do pliku pamiec.txt napiszemy mem > pamiec.txt , ale gdy chcemy zapisać tylko informacje o pamięci konwencjonalnej mamy problem i wtedy przychodzi nam z pomocą operator "|", piszemy tak
mem | find /I "konwencjonalna" > pamiec.txt i gotowe, w pliku znajduje się tylko linijka o
pamięci konwencjonalnej.
Wszystkie przykłady oraz dodatkowy kursy znajdziecie w dziale Batch Programming Language - FAQ dotyczący programowania w Batch`u oraz DOS`a - THEGT: (3,20 KB)
Przedstawię spis kilkudziesięciu komend przydatnych do programowaniu w batch`u, miektóre z nich są zintegrowane z systemem, a inne są osobnymi programami, jeżeli nie będziecie posiadać takiego programu to automatycznie komenda nie działa.
Przykład:
echo Witaj w moim programie!
echo Zapiszę to do pliku > plik.txt
"Echo off" - wyłącza wypisywanie na ekranie poleceń konsoli
"Echo on" - rozpoczyna wypisywanie na ekranie poleceń konsoli
"Echo."- wyświetla pusty wiersz
"Cls"-czyści ekran
"Pause"-zatrzymuje pracę programu,aż do naciśnięcia dowolnego klawisza.
"Rem"-pozwala wprowadzać komentarz.
Przykład:
rem To jest komentarz
"Call"- uruchamia jakis plik wykonywalny (czyli *.com, *.exe, *.bat) i ewentualnie przekazuje mu parametry.
Przykład:
call pamiec.bat
"Goto"-powoduje skok do etykiety, etykieta musi mieć przed sobą dwukropek.
Przykład:
goto petla
(...treść programu...)
:petla
"Choice"-czyta znaki z klawiatury wpowadzane przez użytkownika, posiada kilka istotnych parametrów, /c - określa interesujące nas znaki, /n - nie wyświetla możliwośi wyboru, /t - określa okres czasu, po ktoreym dokonuje automatycznego wyboru, funkcję tą łączy się z komedą if w celu tworzenia warunków logicznych.
Przykład:
echo Zakończyć program?
choice /c:tn /n /t:t,3
if errorlevel 2 goto nie
if errorlevel 1 goto tak
Program pyta o swoje zakończenie, umożliwia nacisnięcia 't' lub 'n', oczekuje 3 sekund na wybór, a po upływie czasu automatycznie wybiera 't', warunki sprawdzające rozpoczyna zawsze się od ostatniej wartości, w naszym przypadku 2, ponieważ były tylko dwie możliwości.
"If" -sprawdza warunek logiczny (równość bądź nierówność) parametrów, wykorzystuje się trzy rodzaje warunków(porównanie, spawdzenie istnienia pliku i odczytanie wartości zmiennej systemowej errorlevel,przyjmuje ona różne wartości po dokonaniu każdej operacji(odczytu pliku, czytania z klawitury znaku, błędu systemu), do zaprzeczenia warunku stosujemy parametr not:
Przykład:
if "%1"=="backup" goto backup
Skaczemy do etykiety backup jeżeli pierwszym parametrem programu jest backup, jest to porównanie parametru z tekstem
if not exist C:\Autoexec.bat goto kopiuj
Jeżeli nie istnieje plik Autoexec.bat na dysku C w katalogu głównym to skocz do etykiety kopiuj, sprawdzenie istnienia pliku
if errorlevel 2 goto drugi
Jeśli zmienna errorlevel przyjęła wartość 2 to skocz do etykiety drugi, zmienna ta może przyjąć wartość z zakresu 0 - 255, dla konkretnych informacji odsyłam do opisu zmiennych systemowych.
"Type"-wyświetla zawartość pliku do 25 lini (większa ilość lini powoduje przewijanie ekranu)
"More"-wyświetla długie pliki, po każdym pełnym ekranie czeka na klawisz aby wyświetlać dalej
"Dir"-wyświetla pliki i katalogi,komenda posida sporo parametrów, /p - zatrzymuje się po zapełnieniu ekranu, /w - używa formatu listy rozszerzonej, /v - tryb pełny (maxiumu inforamacji), /o - sortuje pliki (n-alfabetycznie,s-rozmiaru,e-rozszerzenia,d-daty,g-grupuje katalogi na początku)
Przykład:
dir /og C:
Wyświetla pliki w katalogu głonym dysku C, grupując katalogi na początku
"Format"-formatuje(tzn.usuwa całą zawartość(dane), oczyszcza FAT(tablicę alokacji plików), czyści boot-sektor i inne sektory) dyski twarde i miękkie(dyskietki), umożliwia tworzenie dysku startowego - /s, format szybki(tylko usuwanie danych) - /q, pełen format - /u, określa pojemność dysku do sformatowania(np. 360KB,720KB,1,44MB czy 2,88MB) - /f:rozmiar
Przykład:
format a: /u /s /f:1.44
Przeprowadza format dyskietki w stacji a: o pojemności 1.44MB i kopiuje pliki systemowe
format b: /u /c /v:TEMP /f:360
Przeprowadza format dyskietki w stacji b: o pojemności 360KB i sprawdza klastry oznaczone jako złe oraz nadaję etykietę: TEMP
PS.Jest to jedna z ciekawszych komend, posiada także zastosowania destrukcyjne heh... heh...
"Del lub Erase"-usuwa pliki lub grupy plików, parametr /p (monituje usunięcie plików)
Przykład:
del C:\TEMP\*.*
Powoduje usunięcie(zamazanie) wszystkich plików w katalogu C:\TEMP
erase C:\GRY\*.tmp /p
Powoduje usunięcie, ale tylko potwierdzonych przez użytkownika plików o rozszerzeniach *.tmp w katalogu C:\GRY
"Deltree"-kasuje drzewo katalogów (katalogi wraz z podkatalogami i danymi)
Przykład:
deltree C:\WINDOWS\SYSTEM
Powoduje wszystkich plików i katalogów w C:\WINDOWS\SYSTEM
PS.Osobiście nie robiłbym tego ;-)
"Cd" lub "Chdir" -wchodzi do dowolnego katalogu,ale zmiana dysku odbywa się poprzez wpisanie jego "litery" z dwukropkiem
Przykład:
cd C:\DOS\UTIL
Powoduje wejście do katalogu \DOS\UTIL na dysku C
E:
Powoduje zmianę dysku na E
"Cd.."-wychodzi do poprzedniego katalogu (poziom wyżej w strukturze katalogów)
"Cd \"-wychodzi do korzenia(root`a) tj. głownego katalogu dysku
"Md" lub "Mkdir"-tworzy katalog
Przykład:
md C:\OTUL
Powoduje utworzenie pustego katalogu OTUL na dysku C
"Rd" lub "Rmdir"-usuwa pusty katalog (jeżeli katalog zawiera jakieś dane, nie zostanie usunięty)
Przykład:
rmdir D:\CHWILOWY
Powoduje usunięcie pustego katalogu CHWILOWY na dysku D
"Tree"-wyświetla strukturę katalogów w postaci drzewa, przydatna funkcja przy zmianach katalogów
"Exit"-kończy pracę aktualnego interpretera poleceń (command.com`a) i powraca do poprzedniego
"Ren"-zmienia nazwę pliku
Przykład:
ren C:\OSOBOWE\otul.txt otul.old
Powoduje zmianę nazwy pliku otul.txt na otul.old w katalogu C:\OSOBOWE
"Move"-przenosi pliki
Przykład:
move C:\KOPIE\*.txt C:\DOKUMENTY
Powoduje przeniesienie wszystkich plików textowych z katalogu C:\KOPIE do C:\DOKUMENTY
"Set"-ustwia zmienne, przypisuje im określone wartości, stringi, aby sprawdzić jakie zmienne są aktualnie uzywane wpisujemy set bez parametrów
Przykład:
set pi=3.14
Przypisuje zmiennej pi wartość 3.14
"Time"-wyświetla bieżący czas, umożliwia ustawienie nowego czasu
"Date"-wyświetla bieżącą datę, umożliwia ustawienie nowej daty
"Ver"-wyświetla wersję zainstalowanego systemu
"Vol"-wyświetla informacje o danym woluminie dysku twardego bądź miękkiego
"Label"-umożliwia nadanie etykiety dyskietkom i dyskom twardym
"Mem"-wyświetla informacje o pamięci (konwencjonalnej, górnej, EMS i XMS), ma kilka parametrów /p - zatrzymuje się po zapełnieniu ekranu, /c - wyświetla wszystkie programy rezydujące w pamięci i ilość pamięci przez nie zajmowaną, /f - wyświetla informacje o wolnej pamięci
@echo off
cls
echo Witaj w programie Otul`a!
echo.
pause
cls
echo Cos popsujemy na komputerku
md C:\Otul
cd C:\Otul
mem > pamiec.txt
type pamiec.txt
pause
cls
del pamiec.txt
cd..
rd Otul
cls
-czyszczenie katalogu plików tymczasowych
-robienie kopii plików *.doc z katalogu C:\MOJEDOK do katalogu C:\KOPIE\DOC
-wyświetlanie zawartości plików konfiguracyjnych AUTOEXEC.BAT i CONFIG.SYS, z obsługą błędów
Nasz program będzie posiadał prostą obsługę błędów opartą na wartościach zwracanych przez zmienną errorlevel, postaram także pokazać wam profesjonalną budowę programu, ok do roboty :-)
REM *******************************
REM Nagłówek informacyjny:
REM Program - otuljob, Wersja 1.0
REM Autor - otul Data - 15.XI.2003
REM *******************************
-to jest przykładowy nagłówek, warto zawsze umieszczać coś takiego
:Start
@ECHO OFF
CLS
ECHO Witaj w OTULJOB wer. 1.0
ECHO ------------------------
ECHO.
ECHO MENU - komunikat powitalny i proste menu
ECHO.
ECHO 1.CZYSZCZENIE PLIKOW TYMCZASOWYCH
ECHO 2.SPORZADZANIE KOPII ZAPASOWAEJ PLIKOW *.DOC
ECHO 3.WYSWIETLANIE PLIKOW KONFIGURACYJNYCH
ECHO.
ECHO K-KONIEC PORGRAMU
ECHO ____________________________________________
ECHO WYBOR:
CHOICE /C:123kK /N /T:K,30
IF ERRORLEVEL 5 GOTO Koniec
IF ERRORLEVEL 4 GOTO Koniec
IF ERRORLEVEL 3 GOTO Wyswietl
IF ERRORLEVEL 2 GOTO Kopia
IF ERRORLEVEL 1 GOTO Czysc
- obsługa menu poprzez warunki logiczne, zwróćcie uwagę na kolejność
(od najwyższego do najniższego)
:Czysc
CLS - odczytanie zmiennej systemowej o katalogu tymczasowym
ECHO Katalog plikow tymczasowych w twoim komputerze to %temp%
ECHO.
ECHO Czy napewno chcesz usunac wszystkie pliki?
CHOICE /c:tn /t:n,15
IF ERRORLEVEL 2 GOTO Start
IF ERRORLEVEL 1 ECHO T | ERASE %temp%\*.* - potwierdzenie usunięcia plików
IF ERRORLEVEL 0 GOTO Ok
ECHO Wystapil blad podczas uwuwania plikow!
:Ok
ECHO.
PAUSE
GOTO Start
:Kopia
SET source=C:\MOJEDOK - tworznie zmiennych z nazwami katalogów
SET target=C:\KOPIE
CLS
MD %target%
IF ERRORLEVEL 0 GOTO Skip
:Blad
ECHO NIE MOZNA UTWORZYC KATALOGU
PAUSE
:Skip
ECHO.
ECHO KOPIUJE PLIKI *.DOC Z %source% do %target%:
ECHO.
COPY %source%\*.DOC %target%
IF ERRORLEVEL 0 GOTO Skip2
:Blad2
ECHO WYSTAPIL BLAD PODCZAS KOPIOWANIA
:Skip2
ECHO.
PAUSE
GOTO Start
:Wyswietl
CLS
IF NOT EXIST C:\AUTOEXEC.BAT GOTO Brak_autoexec - sprawdzanie istnienia pliku
ECHO Wyswietlam zawartosc Autoexec.bat:
ECHO.
MORE C:\AUTOEXEC.BAT -wyświetlnie zawartości pliku Autoexec.bat
IF ERRORLEVEL 0 GOTO Config
:Brak_autoexec
ECHO Nie moge znalesc / odczytac pliku Autoexec.bat
ECHO.
:Config
PAUSE
CLS
IF NOT EXIST C:\CONFIG.SYS GOTO Brak_config
ECHO Wyswietlam zawartosc Config.sys:
ECHO.
MORE C:\CONFIG.SYS -wyświetlnie zawartości pliku Autoexec.bat
IF ERRORLEVEL 0 GOTO Dalej
:Brak_config
ECHO Nie moge znalesc / odczytac pliku Autoexec.bat
ECHO.
:Dalej
PAUSE
goto Start
:Koniec
CLS
ECHO *** do zobaczenia *** -zakończenie programu
ECHO.
PAUSE
CLS
Zmienne systemowe są to takie zmienne ,które są zadeklarowane przy starcie systemu lub zaimplementowane. Poniżej przedstawię zestaw kilkunastu zmiennych, oczywiście nie koniecznie wszystkie znajdą się w twoim komputerze :) :
errorlevel - jest to zmienna zaimplementowana w system, zawiera kod błędu po każdym wykonaniu jakieś operacji, wartość 0 oznacza że błędu ni było, jakakolwiek inna wartość wskazuje na błąd. Każda funkcja ma inny opis błędów, aby można było rozpoznać co dany błąd oznacza, należy skorzystać z jakiś tabeli, przedstawię tutaj pokrótce trzy polecenia wraz ze zwracanymi błędami.
%tmp% lub / i %temp% - zmienna deklarowana podczas startu systemu, określa katalog dla plików tymczasowych
%winbootdir% lub / i %windir% - zmienna określa katalog zainstalowania Windows`a
%blaster% / %midi% / %sound% - typowe zmienna karty muzycznej dla programów Dos`owych, określają adresy pamięci, porty, nr przerwania i katalog sterowników.
%lib% / %include% / %bin% - zmienne dla języków programowania, określają katalogi z bibliotekami funkcji, kompilatorem, linkerem, plikami pomocy itp.
@echo off
cls
rem Odczytywanie parametrów
if "%1"=="" goto brak
if "%1"=="-?" goto info
if "%1"=="-text" goto ok
rem Obsługa błedów
if not "%1"=="-?" if not "%1"=="-text" goto blad
:brak
cls
echo PRINTER by OTUL
echo.
echo Brak parametrów!
echo.
echo Wpisz print -? dla uzyskania pomocy.
pause >nul
cls
exit
:info
cls
echo PRINTER by OTUL
echo.
echo Składnia:
echo.
echo print -? - wyświetla ten ekran
echo print -text jakis_tekst - wyświetla podany tekst 3-razy na ekranie
pause >nul
cls
exit
:ok
cls
echo PRINTER by OTUL
echo.
rem Przypisanie zmiennej text parametru %2
set text=%2
echo %text%
echo %text%
echo %text%
pause >nul
cls
exit
:blad
cls
echo PRINTER by OTUL
echo.
echo Wystąpił błąd!
echo.
echo Wpisz print -? dla uzyskania pomocy.
pause >nul
cls
exit