Tryb linii komend w systemach DOS/Windows

Oryginalne materiały do ćwiczenia znajdują się pod adresem:
Tryb linii komend i programowanie wsadowe w systemach DOS/Windows
Program "choice"
Spis poleceń


Wstęp

Tryb linii komend służy do wydawania poleceń systemowi operacyjnemu poprzez wpisywanie komend z klawiatury. Tryb ten jest dostępny we wszystkich wersjach systemów operacyjnych firmy Microsoft. W systemach graficznych (Windows) jest on uzupełnieniem okienkowej komunikacji z użytkownikiem. W systemie Windows 2000 tryb linii komend można uruchomić:
Start->Uruchom...->cmd
Komendy dzielą się na:
Nazwy plików w linii komend występują w konwencji 8.3 tzn. nazwa składa się z ośmiu znaków, a po kropce występuje rozszerzenie składające się z trzech znaków. Długie nazwy plików są dostępne przez wpisanie ich w cudzysłowach. System Windows wyświetla długie nazwy w ten sposób, że obcina nazwę do sześciu znaków i dodaje końcówkę ~1, ~2 itd.
Wydawanie poleceń polega na wpisaniu nazwy polecenia, często z parametrami, i zatwierdzeniu go klawiszem ENTER.
Dla każdej komendy można uzyskać pomoc przez wywołanie jej z parametrem /?

Podstawowe komendy:

cd [..][/D][dysk:][ścieżka]
Wyświetla nazwę bieżącego katalogu lub zmienia go. Polecenie bez parametrów wyświetla bieżący dysk i katalog. Wywołanie z parametrem .. powoduje przejście do katalogu nadrzędnego. Parametr /D powoduje ze zmianą katalogu zmianę bieżącego dysku.
Przykład:
cd ..
cd c:\Winnt\Profiles


dir [dysk:][ścieżka][plik] [opcje]
Wyświetla listę plików i podkatalogów w katalogu.
Opcje:
/A wyświetla pliki z określonymi atrybutami:
D katalogi
H pliki ukryte
S pliki systemowe
R pliki tylko do odczytu
A pliki gotowe do archiwizacji
- prefiks oznaczający negację atrybutu
/Bużywa prostego formatu wyświetlania
/Cwyświetla w rozmiarach plików separator tysięcy
/Dstosuje format szerokiej listy posortowanej kolumnami
/Lużywa małych liter
/Nnowy format długiej listy (nazwy z prawej strony)
/O stosuje sortowanie:
N wg nazw (alfabetycznie)
E wg rozszerzeń (alfabetycznie)
G katalogi na początku
S wg rozmiarów (od najmniejszych)
D wg dat i godzin (od najstarszych) - odwrócenie kolejności
/Pwstrzymuje wyświetlanie po zapełnieniu ekranu
/Qwyświetla informacje o właścicielach plików
/Swyświetla pliki w określonym katalogu i wszystkich podkatalogach
/Tokreśla które pole czasowe jest wyświetlane lub używane do sortowania
/Wstosuje format szerokiej listy posortowanej wierszami
/Xwyświetla krótkie nazwy dla plików
/4wyświetla rok przy użyciu czterech liter
Powyższe opcje można umieścić w zmiennej środowiskowej DIRCMD. Domyślne ustawienia opcji można zmienić, dodając do nich prefiks -
Przykład:
dir /O:-S
dir c:\Winnt\system32 /-N


mkdir [dysk:]ścieżka
Tworzy katalog. W razie potrzeby tworzy wszystkie pośrednie katalogi.
Przykład:
mkdir \ALA\OLA\ULA\ELA

rmdir [opcje] [dysk:]ścieżka
Usuwa katalog.
Opcje:
/S usuwa wraz z określonym katalogiem wszystkie katalogi i pliki w nim umieszczone
/Q nie żąda potwierdzanaia usuwania nie pustych katalogów
Przykład:
rmdir /S /Q Ala

copy [opcje] źródło [cel]
Kopiuje pliki podane jako źródło, w inne miejsce (cel).
Opcje:
/A oznacza plik tekstowy ASCII
/B oznacza plik binarny
/V weryfikuje, czy kopiowane pliki są poprawnie zapisywane
/N używa krótkich nazw plików
/Y nie monituje o potwierdzenie zastąpienia istniejącego pliku docelowego
/-Y monituje o potwierdzenie zastąpienia istniejącego pliku docelowego
/Z kopiuje pliki sieciowe w trybie restartowalnym
Opcja /Y lub /-Y może być ustawiona w zmiennej środowiskowej COPYCMD
Przykład:
copy /A /V *.txt \Ala

move [opcje] [dysk:][ścieżka]nazwa1 nazwa2
Przenosi i zmienia nazwy plików i katalogów.
Aby przenieść jeden lub więcej plików jako nazwa1 trzeba podać nazwy plików, a jako nazwa2 należy podać katalog docelowy. Aby zmienić nazwę katalogu, jako nazwa1 należy podać nazwę katalogu, którego nazwę chcemy zmienić, a jako nazwa2 należy podać nową nazwę.
Opcje:
/Y nie monituje o potwierdzenie zastąpienia istniejącego pliku docelowego
/-Y monituje o potwierdzenie zastąpienia istniejącego pliku docelowego
Opcja /Y lub /-Y może być ustawiona w zmiennej środowiskowej COPYCMD
Przykład:
move /Y C:\*.log c:\Logi
move C:\Logi c:\Dzienniki


rename [dysk:][ścieżka]nazwa1 nazwa2
Zmienia nazwę pliku lub plików. Należy pamiętać, że nie można określić nowego dysku, ani nowej ścieżki dla pliku docelowego.

Zmienne środowiskowe

Zmienne środowiskowe służą do przechowywania ważnych dla systemu informacji, w tym ścieżek dostępu do plików. Do wyświetlania, dodawania i usuwania zmiennych środowiskowych służy polecenie set. Wywołanie polecenia set bez argumentów spowoduje wyświetlenie wszystkich aktualnie zdefiniowanych zmiennych środowiskowych.
Instrukcja:
set nazwa_zmiennej=łańcuch_znaków
spowoduje dopisanie nowej zmiennej o wartości "łańcuch_znaków"
Instrukcja:
set nazwa_zmiennej=
spowoduje usunięcie zmiennej "nazwa_zmiennej"
Odwołanie do zmiennej następuje poprzez wywołanie %nazwa_zmiennej%.
Specjalne znaczenie ma zmienna środowiskowa PATH. Służy ona do przechowywania ścieżek dostępu do katalgów, do których użytkownik ma bezpośredni dostęp z linii komend. Określa ona gdzie - poza aktualnie wybranym katalogiem - poszukiwany jest program odpowiadający komendzie wpisnej w linii komend. Do ustawiania tej zmiennej służy komenda path z argumentem - listą katalogów.

Wejście i wyjście

Do wyprowadzania na ekran zawartości pliku służy instrukcja:
type [dysk:][ścieżka]nazwa_pliku
Standardowym wejściem w linii komend jest klawiatura, a wyjściem monitor. Takie standardowe wejście i wyjście nosi nazwę konsoli (con). Istnieje mżliwość zmiany wejścia i wyjścia ze standardowych na inne. Wejściem może być plik, a wyjściem plik lub drukarka. Istnieje również urządzenie puste - nul. Skierowanie wyjścia na to urządzenie spowoduje utratę wyjściowego ciągu znaków. Operatorem przekierowania wyjścia jest znak > zaś operatorem przekierowania wejścia jest znak <.
Przykład:
help < pomoc.txt
copy con plik.txt


Przetwarzanie potokowe

Komunikaty wyświetlane przez każdą komendę mogą stanowić dane wejściowe do innego polecenia, tak zwanego filtru. Pozwala to na porządkowanie i wyszukiwanie danych wyjściowych. Przetwarzanie, w którym strumień danych wyjściowych z jednego programu (polecenia) stanowi jednocześnie strumień danych wejściowych do innego programu nazywa się przetwarzaniem potokowym.
Składnia przy przetwarzaniu potokowym jest następująca:
polecenie | filtr
Dostępne filtry to:
polecenie | more [opcje]
Zatrzymuje wyświetlanie na wyjściu po zapełnieniu pełnego ekranu, i czeka na naciśnięcie dowolnego klawisza. Po wciśnięciu klawisza wyświetla następny pełny ekran.
Opcje:
/E włącza rozszerzone funkcje
/C czyści ekran przed wyświetleniem strony
/P rozszerza znaki nowego wiersza
/S łączy sąsiednie puste wiersze w jeden wiersz
/Tn zmienia tabulatory na n spacji (domyślnie 8)
/+n zaczyna wyświetlanie od wiersza n
Opcja /E /C /P /S może być ustawiona w zmiennej środowiskowej MORE
Przykład:
type index.html | more +10

polecenie | sort [opcje]
Sortuje dane wejściowe.
Opcje:
/R odwraca porządek sortowania
/O plik określa plik w którym mają zostać zapisane dane posortowane
/+n określa numer znaku, od którego na się rozpocząć każde porównywanie. Wiersze krótsze niż n znaków są sortowane przed innymi wierszami
Przykład:
type miasta.txt | sort /R /O posortowane.txt

polecenie | find [opcje] "ciąg"
Wyszukuje ciąg znaków w strumieniu danych.
Opcje:
/V wyświetla wszystkie wiersze nie zawierające podanego ciągu
/C wyświetla tylko liczbę wierszy zawierających szukany ciąg
/N wyświetla wiersze i ich numery
/I nie rozróżnia wielkich i małych liter
Przykład:
type index.html | find /N /I "title"

Inne komendy

date
Wyświetla i ustawia datę.
time
Wyświetla i ustawia czas systemowy.
prompt [tekst]
Zmienia tekst zgłoszenia konsoli tekstowej. Tekst zgłoszenia może składać się ze zwykłych znaków i następujących kodów:
$A& (znak ampersand)
$B| (potok)
$C( (lewy nawias)
$Dbieżąca data
$Ekod Escape (kod ASCII 27)
$F) (prawy nawias)
$G> (znak większe niż)
$Hznak Backspace (kasuje poprzedni znak)
$L< (znak mniejsze niż)
$Nbieżący dysk
$Pbieżący dysk i ścieżka
$Q= (znak równości)
$S (spacja)
$Tbieżąca godzina
$Vnumer wersji systemu
$_powrót karetki i znak wysuwu wiersza
$$$ znak dolara

FOR - instrukcja pętli

Wykonuje określone polecenie dla wszystkich plików ze zbioru plików.

FOR %zmienna IN (zbiór) DO polecenie [parametry_polecenia]
%zmienna Określa parametr wymienny.
(zbiór) Określa zbiór - jeden lub kilka plików. Używanie symboli wieloznacznych jest dozwolone.
polecenie Określa polecenie, które ma być wykonane dla każdego pliku.
parametry_polecenia Określa parametry lub opcje dla określonego polecenia.

Aby użyć polecenia FOR w programie wsadowym, wpisz %%zmienna zamiast %zmienna.
W nazwach zmiennych rozróżnia się małe i wielkie litery, tak więc %i różni się od %I

Przy włączonych rozszerzeniach poleceń obsługiwane są następujące dodatkowe formy polecenia FOR:
FOR /D %zmienna IN (zbiór) DO polecenie [parametry-polecenia]
Jeśli "zbiór" zawiera symbole wieloznaczne, to mają być poszukiwane odpowiednie nazwy katalogów, a nie nazwy plików.

FOR /R [[dysk:]ścieżka] %zmienna IN (zbiór) DO polecenie [parametry-polecenia]
Wędruje po drzewie katalogów poczynając od katalogu [dysk:]ścieżka, wykonując polecenie FOR w każdym katalogu tego drzewa. Jeśli po /R nie podano żadnego katalogu, to używany jest katalog bieżący. Jeśli "zbiór" jest określony tylko przez pojedynczy znak kropki (.), to polecenie wyliczy tylko zawartość drzewa katalogów.

FOR /L %zmienna IN (początek,krok,koniec) DO polecenie [parametry-polecenia]
W tym przypadku zbiór jest ciągiem liczb od wartości "początek" do wartości "koniec", zmieniających się o wartość "krok". Tak więc (1,1,5) generuje ciąg 1 2 3 4 5, a (5,-1,1) generuje ciąg (5 4 3 2 1)

FOR /F ["opcje"] %zmienna IN (zbiórplików) DO polecenie [parametry-polecenia]
FOR /F ["opcje"] %zmienna IN ("ciąg") DO polecenie [parametry-polecenia]
FOR /F ["opcje"] %zmienna IN ('polecenie') DO polecenie [parametry-polecenia]
zbiórplików jest jedną lub wieloma nazwami plików. Każdy plik jest otwierany, odczytywany i przetwarzany przed przejściem do następnego pliku z tego zbioru. Przetwarzanie polega na odczytaniu pliku, podzieleniu go na poszczególne wiersze tekstu i podzieleniu każdego wiersza na zero lub więcej leksemów. Wówczas wywoływana jest główne polecenie pętli, przy czym jako wartości zmiennych są przypisywane ciągi znalezionych leksemów. Domyślnie opcja /F przekazuje pierwszy oddzielony spacją leksem z pierwszego wiersza każdego pliku. Puste wiersze są pomijane. Można zmienić domyślny sposób podziału wierszy określając opcjonalny parametr "opcje". Jest to ciąg umieszczony w cudzysłowie, który zawiera jedno lub więcej słów kluczowych określających różne parametry podziału.
Dostępne są następujące słowa kluczowe:
eol=c określa znak komentarza końca wiersza (tylko jeden)
skip=n określa liczbę wierszy do pominięcia na początku pliku.
delims=xxx określa zestaw ograniczników. Zastępuje domyślny zestaw ograniczników (spację i tabulator).
tokens=x,y,m-n określa tokeny, które mają być przekazywane z każdego wiersza do głównego polecenia w każdej iteracji. Spowoduje to przydzielenie dodatkowych nazw zmiennych. m-n oznacza zakres, czyli tokeny od m-tego do n-tego. Jeśli ostatni znak ciągu tokens= jest gwiazdką, wówczas przydzielana jest dodatkowa zmienna, która otrzymuje pozostały tekst z wiersza po przydzieleniu ostatniego tokenu.
usebackq określa, czy wymuszane są nowe semantyki, gdzie ciąg w odwrotnych apostrofach jest wykonywany jako polecenie, a ciąg w apostrofach jest literałem polecenia i zezwala na użycie cudzysłowów dla nazw plików w zbiórplików.

Przykłady, które mogą pomóc:


FOR /F "eol=; tokens=2,3* delims=, " %i in (mójplik.txt) do @echo %i %j %k

    analizuje każdy wiersz w pliku mójplik.txt, ignorując wiersze
    rozpoczynające się od średnika, przekazuje drugi i trzeci token z każdego
    wiersza do głównego polecenia, z tokenami rozdzielonymi przecinkami i/lub
    spacjami. Zauważ, że dla głównego polecenia odwołanie instrukcji %i
    pobiera drugi token, %j trzeci token, a %k pobiera wszystkie pozostałe
    tokeny po trzecim. Dla nazw plików zawierających spacje, należy stosować
    cudzysłowy. Aby używać cudzysłowów w ten sposób, należy również użyć opcji
    usebackq, bo w przeciwnym razie cudzysłowy będą interpretowane do analizy
    jako ciąg literalny.
%i jest deklarowane jawnie w instrukcji, a %j i %k są jawnie deklarowane poprzez opcję tokens=. Można określić do 26 tokenów za pomocą wiersza tokens=, nie próbując zadeklarowania zmiennej większej niż litera 'z' lub 'Z'. Pamiętaj, że nazwy zmiennej FOR uwzględniają wielkość liter, są globalne i nie można mieć ich aktywnych więcej niż 52 w tym samym czasie.
Można również użyć logicznego analizowania FOR /F na ciągu natychmiastowym umieszczejąc w apostrofach zbiórplików między nawiasami. Będzie to potraktowane jako pojedynczy wiersz wyjścia z pliku i przeanalizowane.
Na koniec, można też użyć polecenia FOR /F do analizy wyjścia polecenia. Dokonuje się tego umieszczając w odwrotnych apostrofach zbiórplików między nawiasami. Będzie to potraktowane jako wiersz polecenia, który jest przekazywany do podrzędnego programu CMD.EXE. Wyjście jest wtedy przechwytywane do pamięci i analizowane jakby był to plik.
Zobacz następujący przykład:
FOR /F "usebackq delims==" %i IN (`zbiór`) DO @echo %i
    wyliczy nazwy zmiennych środowiskowych w bieżącym środowisku.
Ponadto, zostało ulepszone podstawianie odwołań zmiennej FOR.
Możesz teraz używać następującej opcjonalnej składni:
%~I - rozwija %I usuwając wszystkie obejmujące cudzysłowy (")
%~fI - rozwija %I do pełnej nazwy ścieżki
%~dI - rozwija %I tylko do litery dysku
%~pI - rozwija %I tylko do ścieżki
%~nI - rozwija %I tylko do nazwy pliku
%~xI - rozwija %I tylko do rozszerzenia pliku
%~sI - rozwinięta ścieżka zawiera tylko krótkie nazwy
%~aI - rozwija %I do atrybutów pliku
%~tI - rozwija %I do daty/czasu pliku
%~zI - rozwija %I do rozmiaru pliku
%~$PATH:I - przeszukuje katalogi wymienione w zmiennej środowiskowej PATH i rozwija %I do pełnej nazwy dla pierwszej znalezionej. Jeśli nazwa zmiennej środowiskowej nie została zdefiniowana lub pliku nie znaleziono w wyszukiwaniu, modyfikator rozwija do pustego ciągu.
Modyfikatory mogą być łączone w celu uzyskania złożonych wyników:
%~dpI - rozwija %I tylko do litery dysku i ścieżki
%~nxI - rozwija %I tylko do nazwy pliku i rozszerzenia
%~fsI - rozwija %I tylko do pełnej nazwy ścieżki z krótkimi nazwami %~dp$PATH:i - przeszukuje katalogi wymienione w zmiennej środowiskowej PATH i rozwija %I do litery dysku i ścieżki dla pierwszej znalezionej.
%~ftzaI - rozwija %I do DIR jak wiersz wyjściowy

W powyższych przykładach %I i PATH można zastąpić innymi prawidłowymi wartościami. Składnia %~ jest zakończona prawidłową nazwą zmiennej FOR. Stosowanie dużych liter dla nazw zmiennych, jak np. %I czyni je czytelniejszymi i zapobiega myleniu z modyfikatorami, które nie uwzględniają wielkości liter.

Więcej informacji w pliku: polecenia.pdf

Ćwiczenia do wykonania

  1. uruchomić tryb linii komend
  2. w otwartym oknie linii komend przejść do katalogu C:\Student używając cd
  3. wyświetlić zawartość innego katalogu, zastosować różne parametry wywołania
  4. stworzyć w katalogu C:\Student katalog SOiSK a następnie w nim podkatalogi:
    KAT1, KAT2 i "katalog trzeci"
  5. korzystając z opcji pomocy wyświetlić pomoc dla każdej wymienionej wyżej komendy
  6. skopiować dowolne pliki przy pomocy copy do swojego katalogu
  7. ustawić dowolną zmienną środowiskową
  8. wyświtlić wszystkie zmienne środowiskowe
  9. usunąć dodaną wcześniej zmienną
  10. korzystając z copy con utworzyć pliki tekstowe
  11. używając strumieni przekopiować i sklejać różne pliki
  12. przetestować wywołanie more, sort, find
  13. przetestować komendę start

Valid XHTML 1.0 Transitional Valid CSS!