zmienne środowiskowe cmd. Podstawy plików BAT

Środowisko powłoki programu Cmd.exe jest definiowane przez zmienne, które określają zachowanie powłoki i systemu operacyjnego. Możesz zdefiniować zachowanie środowiska powłoki lub środowiska całego systemu operacyjnego za pomocą dwóch typów zmiennych środowiskowych: systemowej i lokalnej. Zmienne środowiskowe systemu definiują zachowanie globalnego środowiska systemu operacyjnego. Lokalne zmienne środowiskowe określają zachowanie środowiska w danej instancji programu Cmd.exe.

Zmienne środowiskowe systemu są wstępnie ustawione w system operacyjny i dostępne dla wszystkich Procesy Windows xp. Tylko użytkownicy z uprawnieniami administracyjnymi mogą zmieniać te zmienne. Te zmienne są najczęściej używane w skryptach logowania.

Lokalne zmienne środowiskowe są dostępne tylko wtedy, gdy użytkownik, dla którego zostały utworzone, jest zalogowany. Zmienne lokalne z ula HKEY_CURRENT_USER są odpowiednie tylko dla bieżącego użytkownika, ale definiują zachowanie globalnego środowiska systemu operacyjnego.

Poniższa lista zawiera różne rodzaje zmienne w malejącej kolejności pierwszeństwa.

  1. Wbudowane zmienne systemowe
  2. Zmienne systemowe ula HKEY_LOCAL_MACHINE
  3. Zmienne lokalne ula HKEY_CURRENT_USER
  4. Wszystkie zmienne środowiskowe i ścieżki są określone w pliku Autoexec.bat.
  5. Wszystkie zmienne środowiskowe i ścieżki są określone w skrypcie logowania (jeśli istnieją).
  6. Zmienne używane interaktywnie w skrypcie lub pliku wsadowym

W muszla każde wystąpienie Cmd.exe dziedziczy środowisko swojej aplikacji nadrzędnej. Dlatego możesz zmieniać zmienne w nowym środowisku Cmd.exe bez wpływu na środowisko aplikacji nadrzędnej.

W poniższej tabeli wymieniono systemowe i lokalne zmienne środowiskowe dla systemu Windows XP.

Zmienny

Opis

%PROFILWSZYSTKICHUŻYTKOWNIKÓW%

Lokalny

Zwraca lokalizację profilu „Wszyscy użytkownicy”.

Lokalny

Zwraca domyślną lokalizację danych aplikacji.

Lokalny

Zwraca ścieżkę do bieżącego folderu.

Lokalny

Zwraca ciąg polecenia, za pomocą którego uruchomiono to wystąpienie programu Cmd.exe.

Systemowe

Zwraca numer wersji bieżących rozszerzeń obsługi poleceń.

Systemowe

Zwraca nazwę komputera.

Systemowe

Zwraca ścieżkę do wykonywalnej powłoki.

Systemowe

Zwraca bieżące dane. Używa tego samego formatu co polecenie data /t. Utworzony przez polecenie Cmd.exe.

Systemowe

Zwraca kod błędu ostatniego użytego polecenia. Wartość niezerowa zwykle wskazuje na błąd.

Systemowe

Zwraca nazwę dysku lokalnego stanowisko pracy Powiązany z katalogiem domowym użytkownika. Ustaw na podstawie lokalizacji katalogu głównego. Katalog domowy użytkownika jest określony w " Użytkownicy lokalni i grupy."

Systemowe

Zwraca pełną ścieżkę do katalogu domowego użytkownika. Ustaw na podstawie lokalizacji katalogu głównego. Katalog domowy użytkownika jest określony w przystawce Użytkownicy i grupy lokalne.

Systemowe

Zwraca ścieżkę sieciową do udostępnionego katalogu domowego użytkownika. Ustaw na podstawie lokalizacji katalogu głównego. Katalog domowy użytkownika jest określony w przystawce Użytkownicy i grupy lokalne.

Lokalny

Zwraca nazwę kontrolera domeny, który uwierzytelnił bieżącą sesję.

%NUMBER_OF_PROCESORS%

Systemowe

Określa liczbę procesorów zainstalowanych na komputerze.

Systemowe

Zwraca nazwę systemu operacyjnego. Na za pomocą systemu Windows 2000, nazwa systemu operacyjnego jest wyświetlana jako Windows_NT.

Systemowe

Określa ścieżkę wyszukiwania plików wykonywalnych.

Systemowe

Zwraca listę rozszerzeń plików, które są uważane za wykonywalne przez system operacyjny.

%PROCESSOR_ARCHITECTURE%

Systemowe

Zwraca architekturę procesora. Wartości: x86, IA64.

%PROCESSOR_IDENTFIER%

Systemowe

Zwraca opis procesora.

%PROCESSOR_LEVEL%

Systemowe

Pobiera numer modelu procesora zainstalowanego na komputerze.

%PROCESSOR_REVISION%

Systemowe

Zwraca numer wersji procesora.

Lokalny

Zwraca parametry wiersz poleceń dla obecnego tłumacza. Utworzony przez polecenie Cmd.exe.

Systemowe

Zwraca dowolną liczbę dziesiętną z zakresu od 0 do 32767. Utworzony przez polecenie Cmd.exe.

Systemowe

Zwraca nazwę dysku zawierającego katalog główny Windows XP (tj. katalog systemowy).

Systemowe

Zwraca lokalizację katalogu systemowego Windows XP.

System i użytkownik

Pobiera domyślne foldery tymczasowe używane przez aplikacje, które są dostępne dla zalogowanych użytkowników. Niektóre aplikacje wymagają zmiennej TEMP, inne wymagają zmiennej TMP.

Systemowe

Zwraca aktualny czas. Używa tego samego formatu co polecenie czas /t. Utworzony przez polecenie Cmd.exe.

Lokalny

Zwraca nazwę domeny zawierającej listę kont użytkowników.

Lokalny

Zwraca nazwę użytkownika, który zalogował się do systemu.

Lokalny

Zwraca lokalizację profilu dla bieżącego użytkownika.

Systemowe

Zwraca lokalizację katalogu systemu operacyjnego.

Deklarowanie własnych zmiennych jest integralną częścią prawie każdego języka programowania, dlatego w języku vbscript są one deklarowane za pomocą słowa kluczowego ciemny, podczas gdy jscript używa słowa kluczowego var.

Zmienne poleceń ciągi Windows reprezentują nieco inny znak, tutaj nie można deklarować grupy zmiennych cmd, ani przypisywać wartości kilku zmiennym naraz w wierszu poleceń. Spójrzmy na następujące wiersze kodu:

echo % Var3% echo % VAR3% echo % vAr3%

Jeden punkt, który należy wziąć pod uwagę

setvar1=100
ustaw zm1 = 100

to nie to samo, to znaczy w pierwszym przypadku tworzymy zmienną cmd "var1", a w drugim - "var1". Z przypisaniem wartości sytuacja jest podobna, więc zwróć uwagę na miejsce !!!

Widzimy, że aby wyświetlić wartość zmiennej za pomocą funkcji Echo, umieszczamy go w symbolu "%", dla ustawić- wystarczy wpisać jego nazwę, warto też wziąć pod uwagę, że wszystkie zmienne mają przypisany typ string.

Jeśli uruchomisz polecenie cmd set, które wyświetla listę wszystkich zmiennych i ich wartości w obecna sesja, zobaczysz, że nowo utworzone zmienne cmd i . Będziemy mogli się do nich odnosić przez całą sesję.

Aby wyczyścić zmienne w wierszu poleceń systemu Windows z ich zawartości, wystarczy przypisać pustą wartość:

po prostu wypisze wiersz %Var3%, a polecenie

W tym przykładzie uciekliśmy znaki & i ^, przypisując w ten sposób frazy:

"100 & 3 = 5"
"100 ^3"

Warto zaznaczyć, że jeśli spróbujemy wyświetlić wartości tych zmiennych za pomocą funkcji cmd set, to nie będzie problemów, ale jeśli użyjemy funkcji echo, otrzymamy zupełnie inny wynik niż oczekiwaliśmy. Tak więc, gdy próbujesz uruchomić następujące polecenie:

Teraz podczas wykonywania kodu:

echo % zm.4% echo % zm.5%

wszystko się powiedzie.

Oczywiste jest, że zmienne cmd utworzone w bieżącym oknie wiersza poleceń nie są dostępne dla innych procesów, ale możliwe jest ustawienie jeszcze większych ograniczeń.

Aby ustawić zasięg lokalny, użyj bloku SETLOCAL …ENDLOCAL. Wszystkie zmienne cmd w wierszu poleceń systemu Windows zadeklarowane w środku tego bloku nie będą widoczne poza nim. Otwórz edytor (ja używam edytora Notatnik++, ponieważ natychmiast podświetla kod) i napisz w nim następujące wiersze kodu:

Widzimy, że najpierw zadeklarowaliśmy zmienną1 i przypisaliśmy jej wartość 0, potem ponownie zadeklarowaliśmy zmienną o tej samej nazwie, ale już w bloku SETLOCAL …ENDLOCAL. Skrypt wyświetla wartość zarówno lokalnej, jak i globalnej var1. Specjalnie użyłem znaków łacińskich, aby w takim przypadku nie wyświetlać kryakozyabry.

Pliki (polecenia) pozwalają na obejście się bez określania bezwzględnych ścieżek do katalogów. Na przykład, jeśli nie znamy litery dysk systemowy, zawsze możemy użyć zmiennej %systemdrive%, który zwraca literę dysku, na którym jest zainstalowany system operacyjny. Ponadto zmienne służą do optymalizacji kodu - parametrowi, który powtarza się wiele razy (na przykład klucz rejestru) można przypisać krótką zmienną i użyć. W tym artykule szczegółowo omówiono różne sztuczki praca ze zmiennymi, a także sposoby zmiany i tworzenia nowych zmiennych. Teraz o wszystkim w porządku.

Klasyfikacja zmiennych środowiskowych
Pomoc systemu Windows rozróżnia dwa typy zmiennych środowiskowych: systemowe i lokalne. Zmienne systemowe zwracają te same wartości dla wszystkich użytkowników. Na przykład, %systemdrive%- litera dysku systemowego i jest taka sama dla wszystkich użytkowników. Jednak wartości zwracane przez zmienne lokalne różnią się w zależności od zalogowanego użytkownika. Na przykład, %profil użytkownika% może zwrócić C:\Documents and Settings\CurrentUser, gdzie CurrentUser jest nazwą rachunek użytkownik.

Dowiedz się, jakie zmienne środowiskowe w systemie operacyjnym są dla Ciebie dostępne i jakie wartości w ten moment przypisany do nich zespół Ci pomoże USTAWIĆ, uruchamiany z wiersza poleceń bez parametrów ( start - uruchom - cmd - ustaw). W ramach tego artykułu interesują nas zmienne oznaczające ścieżki do różnych folderów (katalogów). Trochę więcej o niektórych z nich poniżej:

Zmienna|Typ|Opis
%SYSTEMDRIVE%|System|Zwraca nazwę dysku zawierającego katalog główny systemu operacyjnego Windows XP /2003 (czyli katalog główny systemu).
%SYSTEMROOT%, %WINDIR%|System|Zwraca lokalizację katalogu głównego systemu operacyjnego Windows/2003
%PATH%|System|Określa ścieżkę wyszukiwania plików wykonywalnych.
%PROGRAMFILES%|System|Wskazuje ścieżkę do katalogu instalacyjnego programu (Pliki programów)
%COMMONPROGRAMFILES%|System|Wskazuje ścieżkę do wspólnego katalogu programu (Program Files\Common Files).
%TEMP% i %TMP%|System and User|Zwraca domyślne foldery tymczasowe używane przez aplikacje, które są dostępne dla zalogowanych użytkowników. Niektóre aplikacje wymagają zmiennej TEMP, inne wymagają zmiennej TMP.
%USERPROFILE%|Local|Zwraca lokalizację profilu bieżącego użytkownika.
%ALLUSERSPROFILE%|Local|Zwraca lokalizację profilu „Wszyscy użytkownicy”.
%CD%|Local|Zwraca ścieżkę do bieżącego folderu.
%APPDATA%|Local|Zwraca domyślną lokalizację danych aplikacji.

Używanie zmiennych w plikach wsadowych
Zacznijmy od prostego przykładu:

CMD/PARTIA:

DEL /F /Q "%AllUsersProfile%\Menu Start\Windows Activation.lnk" DEL /F /Q "%AllUsersProfile%\Menu Start\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr "

W tym przykładzie usuwam powyższe skróty z menu Start za pomocą zmiennej %Profil wszystkich użytkowników%, a także wszystkie pliki z rozszerzeniem SCR z katalogu Windows\system32 za pomocą zmiennej %SystemRoot%. Zamiast DEL / F / Q, jak rozumiesz, może być wszystko: od polecenia kopiowania do polecenia uruchomienia instalacji aplikacji, której potrzebujemy, ze wszystkimi parametrami wiersza poleceń, jeśli to konieczne.

We wszystkich poleceniach specjalnie użyłem "cytatów" - to nie jest przypadkowe. Cała ścieżka, w tym zmienne, musi być ujęta w cudzysłów, jeśli używasz ścieżek zawierających spacje. Nawet jeśli sama zmienna nie zawiera cudzysłowów, spacje mogą pojawić się w ścieżce po jej przeanalizowaniu przez system (na przykład %Pliki programów% w C:\Program Files). W każdym razie lepiej jest używać cudzysłowów - to dobry format dla plików wsadowych.

Jak ustawić zmienne

W powyższym przykładzie wykorzystano już istniejące zmienne środowiskowe. I prawdopodobnie zauważyłeś symbole procentów otaczające nazwy zmiennych. Znaki te są potrzebne, aby umożliwić podstawianie wartości zmiennych w wierszu poleceń lub w pliku wsadowym. Symbole procentowe wskazują, że Cmd.exe powinien odwoływać się do wartości zmiennych, a nie porównywać znak po znaku. Poniżej zobaczysz, jak to działa. Możesz ustawić swoje zmienne w pliku wsadowym za pomocą polecenia SET.

USTAW polecenie
Możesz ustawić swoje zmienne w pliku wsadowym za pomocą tego samego polecenia SET.

Aby dodać zmienną, wpisz w wierszu poleceń:

Kod:

Ustaw nazwa_zmiennej=wartość

Aby wyświetlić zmienną, w wierszu polecenia wpisz:

Kod:

Ustaw nazwę zmiennej

Aby usunąć zmienną, wpisz w wierszu poleceń:

Kod:

Ustaw nazwa_zmiennej=

Na przykład,

Kod:

SET mydir=D:\Pliki\Praca

definiuje zmienną mydir, co zwróci ścieżkę do określonego folderu. Możesz przeczytać więcej o poleceniu z ustawić/?.

Ważna uwaga: zmienne ustawione przez komendę set są ważne tylko przez czas trwania sesji komendy (patrz niżej), w której zostały ustawione.

Zmienne te można tworzyć np. dla dowolnych ścieżek, wystarczy ustawić lub znaleźć algorytm przypisania zmiennej w każdej konkretnej sytuacji, korzystając z gotowych przykładów lub tworząc na ich podstawie własny. Z reguły takie zmienne są tworzone w bieżącej sesji przez pliki wsadowe przy użyciu niektórych instrukcji.

Przykład przypisywania zmiennych w pliku RunOnceEx.cmd, który importuje ustawienia do rejestru

CMD/PARTIA:

@echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100 REG ADD %KEY% /V TITLE /D "Instalowanie aplikacji" /f REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f REG ADD %KEY%\%i% /V 2 / D „REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s” /f SET /A i+=1

W tym skrypcie polecenie SET ustawia dwie zmienne - %i% I %KLUCZ%. Pamiętaj, że są one określone bez symboli procentowych, ale %% jest już potrzebny, aby uzyskać do nich dostęp. Zmienny %KLUCZ% służy uproszczeniu i optymalizacji kodu. Pozostaje on niezmieniony przez całą bieżącą sesję poleceń, co eliminuje potrzebę każdorazowego umieszczania klucza rejestru w kodzie. Za każdym razem występuje w kodzie %KLUCZ%, zostanie zastąpiony przez HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. I tu %i% służy do sekwencyjnej numeracji kluczy rejestru. Przy wartości początkowej 100, zmienna jest zwiększana o jeden za pomocą polecenia SET /A i+=1 po każdym bloku poleceń, co daje sekwencję 100, 101, 102 i tak dalej. Tak więc linia

Kod:

REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f

faktycznie działa tak

Kod:

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f

Zauważ, że fragment pliku używa również zmiennej systemowej %systemdrive%, który odpowiada literze dysku systemowego.

Przykład przypisywania zmiennych w pliku wsadowym, który instaluje aplikację z płyty CD:

Kod:

Dla %%i w (C D E F G H I J K L M N O P Q R S T U V W X Y Z) wykonaj jeśli istnieje %%i:\WIN51 ustaw CDROM=%%i: uruchom /wait „%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe”

Ten przykład wyszukuje określony plik (WIN51) dla wszystkich wymienionych dysków. Jeśli zostanie znaleziony na jednym z dysków, temu drugiemu przypisana jest zmienna %CDROM%, a następnie odbywa się instalacja oprogramowanie korzystając ze ścieżki podanej przez utworzoną zmienną.

Zmiana zmiennych środowiskowych i dodawanie własnych zmiennych

Jak wspomniano powyżej, wpływ zmiennych ustawionych przez polecenie set jest ograniczony do bieżącej sesji polecenia. Jeśli chcesz uzyskać zmienną systemową lub zmienną użytkownika ze zmiennej tymczasowej, musisz ją zarejestrować w rejestrze. Można to również zrobić na różne sposoby.

narzędzie setenv
Narzędzie działa z wiersza poleceń (strona internetowa, pobieranie). Praca z narzędziem jest bardzo prosta (setenv /?).


Ustawienia użytkownika|setenv -u wartość nazwa_zmiennej
Ustawienia systemowe | setenv -m wartość nazwa_zmiennej
Ustawienia Domyślne Użytkownik|setenv -d wartość nazwy zmiennej
Bieżące ustawienia sesji użytkownika | setenv -v wartość nazwy zmiennej

Na przykład, jeśli potrzebujesz uzyskać zmienną %temp% na etapie instalacji, możesz to zrobić z cmdlines.txt , na przykład:

Kod:

:: Tworzenie i ustawianie folderu Temp... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp

Narzędzie jest wygodne, ponieważ po ustawieniu zmiennej można z niej korzystać od razu. No, prawie od razu - w kolejnej sesji zespołowej. Aby użyć go w bieżącej sesji, możesz użyć starego znanego polecenia set:

Kod:

:: Tworzenie #EgOrus# var set EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus%

Importuj ustawienia do rejestru
Jeśli przejdziesz przez wprowadzenie zmian w rejestrze po pierwszym logowaniu, zmienne zaczną "działać" dopiero po ponownym uruchomieniu lub zakończeniu sesji użytkownika. Oczywiście podczas procesu automatycznej instalacji możesz zaimportować żądane ustawienia na T-12 (patrz artykuł Poprawki rejestru) i ominąć ten problem. Jeśli nie zamierzasz używać przypisanej zmiennej w bieżącej sesji użytkownika, importowanie do rejestru może również Ci odpowiadać. Nie będę ponownie opisywał procesu importowania plików REG, ale rozważę polecenie REG ADD na konkretnym przykładzie.

Załóżmy, że interesuje Cię posiadanie zmiennej w systemie %CDROM% na stałe i zainstaluj go podczas instalacji aplikacji z płyty CD. Postępując zgodnie z powyższym kodem, po zdefiniowaniu zmiennej, przypisz ją do zmiennej systemowej.

CMD/PARTIA:

Dla %%i w (CDEFGHIJKLMNOPQRSTUVW XYZ) wykonaj jeśli istnieje %%i:\WIN51 ustaw CDROM=%%i: REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% / F

Po znalezieniu pliku WIN51 dysk, na którym został znaleziony, otrzymuje zmienną lokalną %CDROM%, która jest natychmiast przypisywana jako stała zmienna systemowa przez zaimportowanie jej do rejestru. Ta metoda została zasugerowana w jednym z tematów na konferencji Oszone Sanja Alone. W tym samym czasie dowiedziałeś się. gdzie ustawienia zmiennych systemowych są przechowywane w rejestrze. Ustawienia zmiennych użytkownika są przechowywane w HKCU\Environment. Ścieżki zwrócone przez zmienne %PROGRAMFILES% i %COMMONPROGRAMFILES% można wyświetlić w ustawieniach ProgramFilesDir i CommonFilesDir w HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, ale nie należy ich tam zmieniać. Katalogi instalacyjne programów (inne niż %SystemDrive%\Program Files) należy skonfigurować za pomocą pliku odpowiedzi .

Streszczenie
Komenda Powłoka Windows(cmd.exe) to bardzo potężne narzędzie do pracy z systemem. Pliki wsadowe mogą zautomatyzować wiele zadań, dlatego często są używane do automatyzacji Instalacja systemu Windows. Umiejętne wykorzystanie zmiennych w plikach wsadowych pozwala rozwiązać szeroki zakres problemów. Praca z powłoką staje się wydajniejsza i jednocześnie upraszcza kod plików wsadowych. Inne przykłady użycia zmiennych można znaleźć na stronach serwisu lub forum. Wszystkie przykłady użyte w tym artykule są zaczerpnięte ze skryptów uczestników forum OsZone.ru, za co wielu im dziękuje.

Terminologia
powłoka poleceń
- jest oddzielnym oprogramowanie, który zapewnia bezpośrednią komunikację między użytkownikiem a systemem operacyjnym. Tekstowy interfejs użytkownika wiersza polecenia zapewnia środowisko, w którym działają aplikacje i narzędzia tekstowe.

cmd.exe- interpreter poleceń, którego powłoka poleceń systemu Windows używa do przetłumaczenia wprowadzonego polecenia na format zrozumiały dla systemu.

Sesja zespołowa można zainicjować jako start cmd.exe lub uruchamiając plik wsadowy. Innymi słowy, tworzona jest bieżąca powłoka poleceń. W związku z tym wyjście z tej powłoki (na przykład koniec pliku wsadowego) kończy sesję poleceń.

Sesja użytkownika(sesja użytkownika) rozpoczyna się w momencie zalogowania (zalogowania) użytkownika i kończy w momencie wylogowania (wylogowania).

Środowisko powłoki cmd.exe jest definiowane przez zmienne, które definiują zachowanie powłoki i systemu operacyjnego.

Możliwe jest zdefiniowanie zachowania środowiska powłoki lub środowiska całego systemu operacyjnego za pomocą dwóch typów zmiennych środowiskowych: systemowej i lokalnej.

Zmienne środowiskowe systemu określają zachowanie globalnego środowiska systemu operacyjnego, a zmienne środowiskowe lokalne określają zachowanie środowiska w danej instancji cmd.exe.

Zmienne środowiskowe systemu są domyślnie ustawiane w systemie operacyjnym i są dostępne dla wszystkich procesów systemu Windows, a użytkownicy z uprawnieniami administracyjnymi mogą zmieniać te zmienne. Te zmienne są najczęściej używane w skryptach logowania.

Lokalne zmienne środowiskowe są dostępne, gdy użytkownik, dla którego zostały utworzone, jest zalogowany. Zmienne lokalne z gałęzi rejestru HKEY_CURRENT_USER są odpowiednie tylko dla bieżącego użytkownika, ale definiują zachowanie globalnego środowiska systemu operacyjnego.

Lista typów zmiennych w porządku malejącym pierwszeństwa.

  1. Wbudowane zmienne systemowe
  2. Zmienne systemowe gałęzi rejestru HKEY_LOCAL_MACHINE
  3. Zmienne lokalne gałęzi rejestru HKEY_CURRENT_USER
  4. Wszystkie zmienne środowiskowe i ścieżki są określone w pliku autoexec.bat.
  5. Wszystkie zmienne środowiskowe i ścieżki są określone w skrypcie logowania (jeśli istnieją).
  6. Zmienne używane interaktywnie w skrypcie lub pliku wsadowym

W powłoce każda instancja cmd.exe dziedziczy środowisko swojej aplikacji nadrzędnej i można odpowiednio zmieniać zmienne w nowym środowisku cmd.exe bez wpływu na środowisko aplikacji nadrzędnej.

Oto lista zmiennych systemowych i lokalnych zmiennych środowiskowych dla systemu Windows XP.

Zmienny

Opis

%PROFILWSZYSTKICHUŻYTKOWNIKÓW%

Lokalny

Zwraca lokalizację profilu „Wszyscy użytkownicy”.

Lokalny

Zwraca domyślną lokalizację danych aplikacji.

Lokalny

Zwraca ścieżkę do bieżącego folderu.

Lokalny

Zwraca ciąg polecenia, za pomocą którego uruchomiono to wystąpienie programu Cmd.exe.

Systemowe

Zwraca numer wersji bieżących rozszerzeń obsługi poleceń.

Systemowe

Zwraca nazwę komputera.

Systemowe

Zwraca ścieżkę do wykonywalnej powłoki.

Systemowe

Zwraca bieżące dane. Używa tego samego formatu co polecenie data /t. Utworzony przez polecenie Cmd.exe.

Systemowe

Zwraca kod błędu ostatniego użytego polecenia. Wartość niezerowa zwykle wskazuje na błąd.

Systemowe

Zwraca nazwę napędu lokalnej stacji roboczej skojarzonej z katalogiem osobistym użytkownika. Ustaw na podstawie lokalizacji katalogu głównego. Katalog domowy użytkownika jest określony w przystawce Użytkownicy i grupy lokalne.

Systemowe

Zwraca pełną ścieżkę do katalogu domowego użytkownika. Ustaw na podstawie lokalizacji katalogu głównego. Katalog domowy użytkownika jest określony w przystawce Użytkownicy i grupy lokalne.

Systemowe

Zwraca ścieżkę sieciową do udostępnionego katalogu domowego użytkownika. Ustaw na podstawie lokalizacji katalogu głównego. Katalog domowy użytkownika jest określony w przystawce Użytkownicy i grupy lokalne.

Lokalny

Zwraca nazwę kontrolera domeny, który uwierzytelnił bieżącą sesję.

%NUMBER_OF_PROCESORS%

Systemowe

Określa liczbę procesorów zainstalowanych na komputerze.

Systemowe

Zwraca nazwę systemu operacyjnego. W systemie Windows 2000 nazwa systemu operacyjnego jest wyświetlana jako Windows_NT.

Systemowe

Określa ścieżkę wyszukiwania plików wykonywalnych.

Systemowe

Zwraca listę rozszerzeń plików, które są uważane za wykonywalne przez system operacyjny.

%PROCESSOR_ARCHITECTURE%

Systemowe

Zwraca architekturę procesora. Wartości: x86, IA64.

%PROCESSOR_IDENTFIER%

Systemowe

Zwraca opis procesora.

%PROCESSOR_LEVEL%

Systemowe

Pobiera numer modelu procesora zainstalowanego na komputerze.

%PROCESSOR_REVISION%

Systemowe

Zwraca numer wersji procesora.

Lokalny

Zwraca opcje wiersza poleceń dla bieżącego interpretera. Utworzony przez polecenie Cmd.exe.

Systemowe

Zwraca dowolną liczbę dziesiętną z zakresu od 0 do 32767. Utworzony przez polecenie Cmd.exe.

Systemowe

Zwraca nazwę dysku zawierającego katalog główny Windows XP (tj. katalog systemowy).

Systemowe

Zwraca lokalizację katalogu systemowego Windows XP.

System i użytkownik

Pobiera domyślne foldery tymczasowe używane przez aplikacje, które są dostępne dla zalogowanych użytkowników. Niektóre aplikacje wymagają zmiennej TEMP, inne wymagają zmiennej TMP.

Systemowe

Zwraca aktualny czas. Używa tego samego formatu co polecenie czas /t. Utworzony przez polecenie Cmd.exe.

Lokalny

Zwraca nazwę domeny zawierającej listę kont użytkowników.

Lokalny

Zwraca nazwę użytkownika, który zalogował się do systemu.

Lokalny

Zwraca lokalizację profilu dla bieżącego użytkownika.

Systemowe

Zwraca lokalizację katalogu systemu operacyjnego.

W tym artykule:

  • Definicja zmiennych
  • Zmienne wiersza poleceń (parametry wywołania pliku bat)
  • JEŚLI warunek warunek
  • Funkcje
  • Korzystanie z wartości zwrotnych (obsługa kodu zakończenia programu)

Definicja zmiennych

USTAWIĆ<Имяпеременной>=<Значениепеременной>

Instrukcja SET jest rozszerzeniem opcji systemu operacyjnego. Określa zmienną, której wartość jest zastępowana jej nazwą, ilekroć nazwa ta jest używana między znakami procentu. Tak więc, jeśli jest podana (zmienna wymagana przez wiele gier, które używają karta dźwiękowa komputer):

ZESTAW BLASTER=A220 I5 D1 P330

następnie używając następującej konstrukcji w pliku wsadowym:

ECHO %BLASTER%

na ekranie pojawi się "A220 I5 D1 P330". Zmienne zdefiniowane za pomocą instrukcji SET nazywane są zmiennymi środowiskowymi i są widoczne po wykonaniu, aż do ponownego uruchomienia DOS (chyba, że ​​zostaną ręcznie zmodyfikowane w pamięci). Oznacza to, że można go użyć z jednego pliku wsadowego lub programu po określeniu go w innym. Najbardziej znana jest zmienna PATH, która jest zbiorem ścieżek do szybkiego wyszukiwania plików. Jest ustawiony w pliku autoexec.bat.

Zmienne wiersza poleceń
(parametry wywołania pliku bat)

%<цифра 0-9>

Jak w każdym języku, tak i w języku plików wsadowych możliwe jest wykorzystanie zmiennych otrzymanych jako parametry pliku bat.

W sumie może istnieć jednocześnie 10 zmiennych niezależnych. Jest to dość mało do pisania złożonych programów, chociaż często wystarcza 3-4 do normalnej pracy. Wartość zmiennej jest równa wartości odpowiedniego parametru z wiersza poleceń. Zmienna %0 będzie zawierać nazwę pliku .bat i, jeśli określono, ścieżkę do niego. To znaczy, jeśli uruchomisz plik abc.bat z następującymi parametrami:

abc.bat a bc def

wtedy %0 będzie zawierało wartość abc.bat, %1 będzie zawierało wartość a, %2 będzie zawierało bc, a %3 będzie zawierało def. Ta właściwość jest szeroko stosowana do tworzenia ogólnych plików wsadowych podczas wykonywania powtarzalnych operacji.

Aby uzyskać więcej niż 10 zmiennych z wiersza poleceń, możesz użyć polecenia SHIFT.

Polecenie SHIFT umożliwia użycie więcej niż 10 opcji wiersza polecenia, jednak wcześniejsze opcje są odpowiednio tracone. Innymi słowy, polecenie SHIFT przesuwa wszystkie wartości zmiennych o jeden krok w lewo. Oznacza to, że zmienna %0 będzie zawierała wartość poprzednio zawartą w zmiennej %1, a zmienna %1 będzie zawierała wartość zmiennej %2 przed przesunięciem. Jednak, ta operacja jest nieodwracalne, to znaczy nie można cofnąć zmiennych.

JEŚLI warunek warunek

Na szczęście powłoka cmd.exe współczesnego systemu Windows 2000 i nowszych obsługuje bloki poleceń w konstrukcjach rozgałęzień, co eliminuje potrzebę etykietowania IF. Bloki poleceń są ujęte w nawiasy. Wygląda to tak (naśladując styl wcięć C/C++):

jeśli warunek (

Rem „wtedy” komendy oddziału

Rem...

) w przeciwnym razie (

Rem „inne” polecenia oddziału

Rem...

Konkretny przypadek użycia:

@echo wyłączone

setBUILDMODE=% 1

if "%BUILDMODE%" == "" (

Echo FAIL: Wymagany jest argument ^(--debug, --release^)

Wyjście /b 1

rem Usuń wszystkie myślniki z argumentu, aby uprościć przetwarzanie

ustaw BUILDMODE=%BUILDMODE:-=%

if "%BUILDMODE%" == "debugowanie" (

Ustaw CCFLAGS=/Od /MDd /Z7

) w przeciwnym razie (

Ustaw CCFLAGS=/O2 /MD

Moim zdaniem można już z tym żyć. Ale, jak zawsze, życie nie jest tak łatwe, jak się wydaje. Jest jeden problem. Zmienne używane w blokach then i else są interpretowane przed rozpoczęciem wykonywania tych bloków, a nie podczas wykonywania. W podanym przykładzie nie powoduje to żadnych problemów, ale w poniższym:

if "%BUILDMODE%" == "debugowanie" (

Echo INFO: Ustawianie trybu debugowania środowiska

Ustaw OPTFLAGS=/Od

Ustaw CCFLAGS=%OPTFLAGS% /MDd /Z7

) w przeciwnym razie (

Echo INFO: Ustawianie trybu uwalniania środowiska

Ustaw OPTFLAGS=/O2

Ustaw CCFLAGS=% OPTFLAGS% /MD

Połów polega na tym, że w obu blokach zmienna OPTFLAGS zostanie podstawiona przed jej zmianą podczas wykonywania tego bloku. Odpowiednio, wartość, którą OPTFLAGS miał na początku wykonywania tego bloku if, zostanie zastąpiona przez CCFLAGS.

Ten problem został rozwiązany za pomocą opóźnionego rozwijania zmiennych. Zmienne ujęte w !…! zamiast %…%, zostaną rozwinięte do ich wartości dopiero w momencie bezpośredniego użycia. Ten tryb domyślnie wyłączone. Możesz go włączyć za pomocą przełącznika /V:ON podczas wywoływania cmd.exe lub za pomocą polecenia:

w tekście samego pliku bat. Drugi sposób wydaje mi się wygodniejszy - nie jest zbyt fajnie wymagać od kogoś uruchomienia skryptu z określonym parametrem.

Mając to na uwadze, poprzedni „niewłaściwy” przykład można poprawić w następujący sposób:

setlocal włączoneopóźnionerozprężanie

if "%BUILDMODE%" == "debugowanie" (

Echo INFO: Konfigurowanie środowiska trybu debugowania

Ustaw OPTFLAGS=/Od

Ustaw CCFLAGS=!OPTFLAGS! /MDd /Z7

) w przeciwnym razie (

Echo INFO: Konfigurowanie środowiska trybu zwalniania

Ustaw OPTFLAGS=/O2

Ustaw CCFLAGS=!OPTFLAGS! /MD

Teraz jest to prawie pełnoprawny blok, jeśli-to-inaczej. Prawie, bo jeśli w którymś z poleceń echa napotkasz nawias zamykający, to musisz uciec za pomocą symbolu ^, w przeciwnym razie parser się pomyli...

Ale w każdym razie jest to znacznie lepsze niż szalona ilość etykiet i przejść.

Funkcje

Czy można utworzyć funkcję w pliku bat? Tak, możesz. Co więcej, czasami jest to nawet konieczne. To prawda, że ​​można to nazwać funkcjami warunkowo.

Dla komendy call istnieje specjalna składnia, która pozwala przeskoczyć do etykiety w tym samym pliku bat, pamiętając miejsce, z którego wykonano to wywołanie:

wywołanie:argumenty etykiety

Powrót z funkcji odbywa się za pomocą polecenia:

wyjście /b [opcjonalny kod powrotu]

Klucz /b jest tutaj bardzo ważny: bez niego nie funkcja zakończy działanie, ale skrypt w ogóle.

Aby uzyskać szczegółowe informacje, wpisz w wierszu poleceń:

dzwonić/?

Wyjście /?

Co ciekawe, polecenie call z tą składnią obsługuje wywołania rekurencyjne z automatyczne tworzenie nowa ramka dla zmiennych argumentów %0-%9. Czasami może to być pomocne. Oto klasyczny przykład rekurencyjnego obliczania silni w języku poleceń:

@echo wyłączone

wywołanie: silnia % 1

echo %RESULT%

Wyjście

rem Funkcja do obliczania wartości silni

Zaloguj się:

rem % 1 Liczba dla której chcesz obliczyć silnię

rem wyjście:

rem %RESULT% Wartość czynnikowa

:Factorial

jeśli %1 == 0 (

Ustaw WYNIK=1

Wyjście /b

jeśli %1 == 1 (

Ustaw WYNIK=1

Wyjście /b

ustaw /a PARAM=% 1 - 1

wywołanie: silnia %PARAM%

ustaw /a WYNIK=%1 * %WYNIK%

wyjście /b

Przykład pracy:

> silnia.bat 10

3628800

Korzystanie z wartości zwracanych
(przetwarzanie kodu wyjścia z programu)

Każdy program po zakończeniu swojej pracy zwraca do systemu operacyjnego kod swojego zakończenia. W przypadku powodzenia zwykle zwraca się zero, w przeciwnym razie kod błędu. Czasami, a raczej często, program "celowo" zwraca wartość niezerową, aby móc "nauczyć się" pewnych szczegółów swojego działania w pliku wsadowym. Na przykład program zwraca kod naciśniętego klawisza, a plik .bat wykonuje na nim różne akcje.

Jak plik wsadowy może znaleźć kod wyjścia wykonanego programu? Służy do tego zmienna kluczowa ERRORLEVEL.

Przykład pliku wsadowego z poziomami błędów:

@echo wyłączone

REM Uruchom program prg1.exe

PRG1.EXE

Analiza kodu wyjścia REM

JEŚLI BŁĄD POZIOM 2 PRZEJDŹ DO FILENOFOUND

JEŚLI BŁĄD POZIOM 1 PRZEJDŹ DO BŁĘDU NAPISANIA

JEŚLI POZIOM BŁĘDU 0 PRZEJDŹ DO WYJŚCIA

PRZEJDŹ DO JEDNEGO WYJŚCIA

:NIE ZNALEZIONO PLIKU

Błąd ECHO! Nie znaleziono pliku!

PRZEJDŹ DO JEDNEGO WYJŚCIA

:NAPISZ BŁĄD

ECHO Błąd zapisu!

PRZEJDŹ DO JEDNEGO WYJŚCIA

:WYJŚCIE

Program ECHO zakończony sukcesem.

PRZEJDŹ DO JEDNEGO WYJŚCIA

:JEDNO WYJŚCIE

Zwróć uwagę - analiza kodu wyjścia nie zaczyna się od zera, ale od maksymalnej możliwej wartości. Faktem jest, że takie sprawdzenie oznacza: „jeśli poziom błędu jest większy lub równy wartości, to ...”. Oznacza to, że jeśli sprawdzamy zaczynając od zera, każda wartość będzie prawdziwa w pierwszym wierszu, co nie jest prawdą.

To najczęstszy błąd w tego typu programach.