• Proměnné prostředí. Nápověda k příkazu set a jeho možnostem

    Uvnitř dávkových souborů můžete pracovat s tzv. proměnnými prostředí (nebo proměnnými prostředí), z nichž každá je uložena v paměť s náhodným přístupem, má svůj vlastní jedinečný název a jeho hodnota je řetězec. Standard Proměnné prostředí se automaticky inicializují při spuštění operačního systému. Takovými proměnnými jsou například WINDIR, které upřesňují umístění adresář Windows, TEMP, která definuje cestu k adresáři pro dočasné uložení soubory Windows nebo PATH, která ukládá systémovou cestu (vyhledávací cestu), tedy seznam adresářů, ve kterých by měl systém hledat spustitelné soubory nebo soubory sdílení(Například, dynamické knihovny). Můžete také deklarovat své vlastní proměnné prostředí v dávkových souborech pomocí příkazu SET.

    Získání hodnoty proměnné

    Chcete-li získat hodnotu konkrétní proměnné prostředí, uzavřete název proměnné do % znaků. Například:

    @ECHO OFF CLS REM Vytvořit proměnnou MyVar SET MyVar=Ahoj REM Změnit proměnnou SET MyVar=%MyVar%! Hodnota proměnné ECHO MyVar: %MyVar% REM Mazání proměnné MyVar SET MyVar= Hodnota proměnné ECHO WinDir: %WinDir%

    Když spustíte takový dávkový soubor, řádek se zobrazí na obrazovce

    Proměnná hodnota MyVar: Dobrý den! Hodnota proměnné WinDir: C:\WINDOWS

    Konverze proměnných jako řetězce

    S proměnnými prostředí můžete manipulovat v dávkových souborech. Nejprve na nich lze provést operaci zřetězení (lepení). Chcete-li to provést, v příkazu SET jednoduše napište hodnoty proměnných, které se mají připojit, vedle něj. Například,

    SADA A=JEDNA SADA B=DVĚ SADA C=%A%%B%

    Po provedení těchto příkazů v souboru bude hodnota proměnné C řetězec "OneTwo". Znak + byste neměli používat pro zřetězení, protože to bude vnímáno jednoduše jako znak. Například po spuštění následujícího souboru

    SET A=JEDNA SET B=Dvě SET C=A+B ECHO Proměnná C=%C% SET D=%A%+%B% ECHO Proměnná D=%D%

    Na obrazovce se objeví dva řádky:

    Proměnná C=A+B Proměnná D=Jedna+dvě

    Za druhé, podřetězce lze extrahovat z proměnné prostředí pomocí konstruktu %variable_name:~n1,n2%, kde číslo n1 určuje posun (počet znaků, které se mají přeskočit) od začátku (pokud je n1 kladné) nebo od konce (pokud je n1 záporné) odpovídající proměnné prostředí a číslo n2 je počet znaků, které se mají vyberte (pokud je n2 kladné) nebo počet posledních znaků v proměnné, které nebudou zahrnuty do vybraného podřetězce (pokud je n2 záporné). Pokud je zadán pouze jeden záporný parametr -n, bude extrahováno posledních n znaků. Pokud je například řetězec "09/21/2007" uložen v proměnné %DATE% (symbolická reprezentace aktuálního data s určitým místním nastavením), pak po provedení následujících příkazů

    SET dd1=%DATE:~0,2% SET dd2=%DATE:~0,-8% SET mm=%DATE:~-7,2% SET yyyy=%DATE:~-4%

    nové proměnné budou mít následující hodnoty: %dd1%=21, %dd2%=21, %mm%=09, %yyyy%=2007.

    Za třetí, můžete provést postup výměny podřetězců pomocí konstrukce %variable_name:s1=s2%(výsledkem je řetězec s každým výskytem podřetězce s1 v odpovídající proměnné prostředí nahrazeným s2 ). Například po provedení příkazů

    SET a=123456 SET b=%a:23=99%

    proměnná b bude ukládat řetězec "199456" . Pokud není uveden parametr s2, pak bude z výstupního řetězce odstraněn podřetězec s1, tzn. po provedení příkazu

    SET a=123456 SET b=%a:23=%

    proměnná b bude ukládat řetězec "1456" .

    Operace s proměnnými jako s čísly

    S povoleným rozšířeným zpracováním příkazů (což je výchozí nastavení ve Windows XP) můžete s hodnotami proměnných prostředí zacházet jako s čísly a provádět s nimi aritmetiku. Chcete-li to provést, použijte příkaz SET s klávesou /A. Zde je příklad dávkového souboru add.bat, který přidá dvě čísla zadaná jako možnosti příkazového řádku a zobrazí výsledný součet na obrazovce:

    @ECHO OFF REM Proměnná M uloží součet SET /A M=%1+%2 ECHO Součet %1 a %2 je %M% REM Vymazat proměnnou M SET M=

    Místní změny proměnných

    Všechny změny provedené pomocí příkazu SET v proměnných prostředí v dávkový soubor, jsou zachovány i po dokončení tohoto souboru, ale jsou platné pouze v aktuálním příkazovém okně. Je také možné lokalizovat změny proměnných prostředí uvnitř dávkového souboru, to znamená automaticky obnovit hodnoty všech proměnných do stavu před spuštěním tohoto souboru. K tomu slouží dva příkazy: SETLOCAL a ENDLOCAL . Příkaz SETLOCAL definuje začátek oblasti místní instalace proměnné prostředí. Jinými slovy, změny prostředí provedené po provedení SETLOCAL budou lokální pro aktuální dávkový soubor. Každý příkaz SETLOCAL musí mít odpovídající příkaz ENDLOCAL k obnovení proměnných prostředí na jejich předchozí hodnoty. Změny prostředí provedené po příkazu ENDLOCAL již nejsou lokální pro aktuální dávkový soubor; jejich předchozí hodnoty nebudou obnoveny po dokončení tohoto souboru.

    V tomto článku:

    • Definice proměnných
    • Proměnné příkazového řádku (parametry volání souboru bat)
    • prohlášení podmínky IF
    • Funkce
    • Použití návratových hodnot (zpracování výstupního kódu programu)

    Definice proměnných

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

    Příkaz SET je rozšířením možnosti pracovat s parametry v operační systém. Určuje proměnnou, jejíž hodnota je nahrazena jejím názvem, kdykoli je tento název použit mezi znaky procent. Pokud je tedy uvedena (proměnná, kterou vyžaduje mnoho her, které používají zvuková karta počítač):

    SET BLASTER=A220 I5 D1 P330

    pak při použití následující konstrukce v dávkovém souboru:

    ECHO %BLASTER%

    na obrazovce se zobrazí „A220 I5 D1 P330“. Proměnné definované pomocí příkazu SET se nazývají proměnné prostředí a jsou viditelné po spuštění, dokud není DOS restartován (pokud není ručně upraven v paměti). To znamená, že jej lze použít z jednoho dávkového souboru nebo programu poté, co byl specifikován v jiném. Nejznámější je proměnná PATH, což je množina cest pro rychlé hledání soubory. Nastavuje se v souboru autoexec.bat.

    Proměnné příkazového řádku
    (parametry volání souboru bat)

    %<цифра 0-9>

    Jako v každém jazyce, v jazyce dávkové soubory je možné použít proměnné přijaté jako parametry souboru bat.

    Celkem může existovat 10 současně existujících nezávislých proměnných. Pro psaní složitých programů je to docela málo, i když pro normální práce dost často a 3-4. Hodnota proměnné se rovná hodnotě odpovídajícího parametru z příkazového řádku. Proměnná %0 bude obsahovat název souboru .bat a pokud je zadán, cestu k němu. To znamená, že pokud spustíte soubor abc.bat s následujícími parametry:

    abc.bat a bc def

    potom %0 bude obsahovat hodnotu abc.bat , %1 bude obsahovat hodnotu a , %2 bude obsahovat bc a %3 bude obsahovat def . Tato vlastnost se široce používá k vytváření obecných dávkových souborů při práci s opakujícími se operacemi.

    Chcete-li z příkazového řádku získat více než 10 proměnných, můžete použít příkaz SHIFT.

    Příkaz SHIFT umožňuje použití více než 10 voleb příkazového řádku, dřívější volby jsou však odpovídajícím způsobem ztraceny. Jinými slovy, příkaz SHIFT posune všechny hodnoty proměnných o jeden krok doleva. To znamená, že proměnná %0 bude obsahovat hodnotu dříve obsaženou v proměnné %1 a proměnná %1 bude obsahovat hodnotu proměnné %2 před posunem. Nicméně, tuto operaci je nevratný, to znamená, že není možné posunout proměnné zpět.

    prohlášení podmínky IF

    Naštěstí, příkazový interpret cmd.exe moderních operačních systémů Windows 2000 a starších operačních systémů podporuje příkazové bloky v konstrukcích větví, což eliminuje potřebu označených IF. Příkazové bloky jsou uzavřeny v závorkách. Vypadá to takto (napodobuje styl odsazení C/C++):

    pokud podmínka (

    Rem 'pak' Příkazy větve

    Rem...

    ) jinak (

    Rem 'else' Příkazy větve

    Rem...

    Konkrétní příklad používání:

    @echo vypnuto

    setBUILDMODE=%1

    if "%BUILDMODE%" == "" (

    Echo FAIL: Argument je povinný ^(--debug, --release^)

    Konec /b 1

    rem Odstraňte z argumentu všechny spojovníky, abyste zjednodušili zpracování

    nastavit BUILDMODE=%BUILDMODE:-=%

    if "%BUILDMODE%" == "ladit" (

    Nastavte CCFLAGS=/Od /MDd /Z7

    ) jinak (

    Nastavte CCFLAGS=/O2 /MD

    Podle mě se s tím už docela dá žít. Ale jako vždy, život není tak snadný, jak se zdá. Je tu jeden problém. Proměnné používané v blocích potom a jinde se rozbalí před zahájením provádění těchto bloků, nikoli během provádění. V uvedeném příkladu to nezpůsobí žádné problémy, ale v následujícím bude:

    if "%BUILDMODE%" == "ladit" (

    Echo INFO: Nastavení režimu ladění prostředí

    Nastavte OPTFLAGS=/Od

    Nastavte CCFLAGS=%OPTFLAGS% /MDd /Z7

    ) jinak (

    Echo INFO: Nastavení režimu uvolnění prostředí

    Nastavte OPTFLAGS=/O2

    Nastavte CCFLAGS=%OPTFLAGS% /MD

    Háček je v tom, že v obou blocích bude proměnná OPTFLAGS nahrazena dříve, než se změní během provádění tohoto bloku. V souladu s tím bude hodnota, kterou měl OPTFLAGS na začátku provádění tohoto bloku if, nahrazena CCFLAGS.

    Tento problém je vyřešen použitím zpožděné expanze proměnné. Proměnné uzavřené v !…! místo %…% se rozšíří do svých hodnot až v okamžiku přímého použití. Tento režim ve výchozím nastavení zakázáno. Můžete jej povolit buď pomocí přepínače /V:ON při volání cmd.exe , nebo pomocí příkazu:

    v textu samotného bat souboru. Druhý způsob se mi zdá pohodlnější – není moc cool vyžadovat, aby někdo spouštěl váš skript s určitým parametrem.

    Díky tomu lze předchozí „špatný“ příklad opravit takto:

    setlocal povoleno zpožděné rozšíření

    if "%BUILDMODE%" == "ladit" (

    Echo INFO: Nastavení prostředí režimu ladění

    Nastavte OPTFLAGS=/Od

    Nastavit CCFLAGS=!OPTFLAGS! /MDd /Z7

    ) jinak (

    Echo INFO: Nastavení prostředí režimu uvolnění

    Nastavte OPTFLAGS=/O2

    Nastavit CCFLAGS=!OPTFLAGS! /MD

    Nyní je to téměř plnohodnotný blok if-then-other. Téměř, protože pokud v některém z příkazů echo narazíte na uzavírací závorku, musíte ji opustit symbolem ^, jinak se analyzátor zmate ...

    Ale v každém případě je to mnohem lepší než šílené množství popisků a přechodů.

    Funkce

    Je možné vytvořit funkci v souboru bat? Ano můžeš. Navíc je to někdy dokonce nutné. Je pravda, že to lze nazývat funkcemi podmíněně.

    Pro příkaz call existuje speciální syntaxe, která vám umožňuje přeskočit na štítek ve stejném souboru bat a pamatovat si místo, odkud bylo toto volání provedeno:

    call:label argumenty

    Návrat z funkce se provádí příkazem:

    exit /b [volitelný návratový kód]

    Klíč /b je zde velmi důležitý: bez něj se neukončí funkce, ale skript obecně.

    Pro podrobnosti zadejte do příkazového řádku:

    volání/?

    odchod /?

    Zajímavé je, že příkaz call s touto syntaxí podporuje rekurzivní volání s automatické vytváření nový rámec pro proměnné argumenty %0-%9. Někdy to může být užitečné. Zde je klasický příklad rekurzivního faktoriálového výpočtu v příkazovém jazyce:

    @echo vypnuto

    call:factorial %1

    echo %RESULT%

    výstup

    rem Funkce pro výpočet faktoriálu

    Přihlášení rem:

    rem %1 Číslo, pro které chcete vypočítat faktoriál

    rem výstup:

    rem %RESULT% Faktorová hodnota

    :faktoriální

    pokud %1 == 0 (

    Nastavte VÝSLEDEK=1

    Konec /b

    pokud %1 == 1 (

    Nastavte VÝSLEDEK=1

    Konec /b

    nastavit /a PARAM=%1 - 1

    call:factorial %PARAM%

    nastavit /a VÝSLEDEK=%1 * %RESULT%

    exit /b

    Příklad práce:

    > faktoriál.bat 10

    3628800

    Pomocí návratových hodnot
    (zpracování ukončovacího kódu programu)

    Každý program na konci své práce vrátí operačnímu systému kód svého dokončení. Při úspěchu je obvyklé vrátit nulu, jinak kód chyby. Někdy, nebo spíše často, program "záměrně" vrací nenulovou hodnotu, aby se mohl "naučit" některé podrobnosti o své činnosti v dávkovém souboru. Program například vrátí kód stisknuté klávesy a soubor .bat s ním provádí různé akce.

    Jak může dávkový soubor zjistit kód ukončení spuštěného programu? K tomu slouží klíčová proměnná ERRORLEVEL.

    Příklad dávkového souboru s chybovými úrovněmi:

    @ECHO VYPNUTO

    REM Spusťte program prg1.exe

    PRG1.EXE

    Analýza výstupního kódu REM

    POKUD ERRORLEVEL 2 GOTO FILENOFOUND

    IF ERRORLEVEL 1 GOTO WRITEERROR

    POKUD ERRORLEVEL 0 GOTO EXITOK

    PŘEJÍT NA VÝSTUP

    :SOUBOR NENALEZEN

    Chyba ECHO! Soubor nenalezen!

    PŘEJÍT NA VÝSTUP

    :SPISOVATEL

    ECHO Chyba zápisu!

    PŘEJÍT NA VÝSTUP

    : EXITOK

    Program ECHO byl úspěšně dokončen.

    PŘEJÍT NA VÝSTUP

    :ONEXIT

    Pozor - analýza výstupního kódu nezačíná od nuly, ale od maximální možné hodnoty. Faktem je, že taková kontrola znamená: „pokud je úroveň chyby větší nebo rovna hodnotě, pak ...“. To znamená, že pokud kontrolujeme od nuly, jakákoli hodnota bude na prvním řádku pravdivá, což není pravda.

    Toto je nejčastější chyba v tomto druhu programů.

    (dávkové) soubory, vám umožní obejít se bez zadávání absolutní cesty do adresářů. Například když neznáme písmeno systémový disk, vždy můžeme použít proměnnou %systemdrive%, která vrátí písmeno jednotky, na které je nainstalován operační systém. Proměnné se také používají k optimalizaci kódu – mnohokrát se opakujícímu parametru (například klíč registru) lze přiřadit krátkou proměnnou a použít jej. Tento článek podrobně popisuje různé techniky pro práci s proměnnými a také jak upravovat a vytvářet nové proměnné. Nyní o všem v pořádku.

    Klasifikace proměnných prostředí
    Nápověda systému Windows rozlišuje dva typy proměnných prostředí: systémové a místní. Systémové proměnné se vrátí stejné hodnoty pro všechny uživatele. Např, %systemdrive%- písmeno systémové jednotky a je stejné pro všechny uživatele. Hodnoty vrácené lokálními proměnnými se však liší v závislosti na přihlášeném uživateli. Například, %uživatelský profil% může vrátit C:\Documents and Settings\CurrentUser, kde CurrentUser je název účet uživatel.

    Zjistěte, jaké proměnné prostředí v operačním systému máte k dispozici a v jakých hodnotách tento moment jim přidělen, tým vám pomůže SOUBOR, spuštěný z příkazového řádku bez parametrů ( start - run - cmd - set). V rámci tohoto článku nás zajímají proměnné označující cestu k různým složkám (adresářům). Trochu více o některých z nich níže:

    Proměnná|Typ|Popis
    %SYSTEMDRIVE%|System|Vrátí název jednotky obsahující kořenový adresář operačního systému Windows XP /2003 (tj. kořenový adresář systému).
    %SYSTEMROOT%, %WINDIR%|System|Vrátí umístění kořenového adresáře operačního systému Windows /2003
    %PATH%|System|Určuje cestu pro hledání spustitelných souborů.
    %PROGRAMFILES%|System|Uvádí cestu k instalačnímu adresáři programu (Program Files)
    %COMMONPROGRAMFILES%|System|Uvádí cestu ke společnému adresáři programu (Program Files\Common Files).
    %TEMP% a %TMP%|Systém a uživatel|Vrátí výchozí dočasné složky používané aplikacemi, které jsou přístupné přihlášeným uživatelům. Některé aplikace vyžadují proměnnou TEMP, jiné vyžadují proměnnou TMP.
    %USERPROFILE%|Local|Vrátí umístění profilu pro aktuálního uživatele.
    %ALLUSERSPROFILE%|Local|Vrátí umístění profilu "Všichni uživatelé".
    %CD%|Local|Vrátí cestu k aktuální složce.
    %APPDATA%|Local|Vrátí výchozí umístění pro data aplikace.

    Použití proměnných v dávkových souborech
    Začněme jednoduchým příkladem:

    CMD/BATCH:

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

    V tomto příkladu odebírám výše uvedené zkratky z nabídky Start pomocí proměnné %AllUsersProfile%, stejně jako všechny soubory s příponou SCR z adresáře Windows\system32 pomocí proměnné %SystemRoot%. Namísto DEL / F / Q, jak chápete, může být cokoli: od příkazu COPY copy po příkaz ke spuštění instalace aplikace, kterou potřebujeme, se všemi parametry příkazového řádku, pokud je to nutné.

    Ve všech příkazech jsem konkrétně použil "uvozovky" - to není náhodné. Pokud používáte cesty obsahující mezery, musí být celá cesta včetně proměnných uzavřena v uvozovkách. I když samotná proměnná neobsahuje uvozovky, mohou se v cestě poté, co byla analyzována systémem, objevit mezery (např. %Programové soubory% v C:\Program Files). V každém případě je lepší používat uvozovky – je to dobrý formát pro dávkové soubory.

    Jak nastavit proměnné

    Výše uvedený příklad používal již existující proměnné prostředí. A pravděpodobně jste si všimli symbolů procent obklopujících názvy proměnných. Tyto znaky jsou potřebné k umožnění nahrazování hodnot proměnných na příkazovém řádku nebo v dávkovém souboru. Symboly procent označují, že Cmd.exe by měl odkazovat na hodnoty proměnných, spíše než provádět porovnání znak po znaku. Níže uvidíte, jak to funguje. Své proměnné můžete nastavit v dávkovém souboru pomocí příkazu SET.

    Příkaz SET
    Své proměnné můžete nastavit v dávkovém souboru pomocí stejného příkazu SET.

    Chcete-li přidat proměnnou, zadejte na příkazovém řádku:

    Kód:

    Nastavit název_proměnné=hodnota

    Chcete-li zobrazit proměnnou, na příkazovém řádku zadejte:

    Kód:

    Nastavit název_proměnné

    Chcete-li odstranit proměnnou, zadejte na příkazovém řádku:

    Kód:

    Nastavit název_proměnné=

    Například,

    Kód:

    SET mydir=D:\Files\Work

    definuje proměnnou mydir, který vrátí cestu k zadané složce. Více o týmu si můžete přečíst od soubor/?.

    Důležitá poznámka: proměnné nastavené příkazem set jsou platné pouze po dobu trvání příkazové relace (viz níže), ve které byly nastaveny.

    Tyto proměnné lze vytvořit například pro libovolné cesty, stačí zadat nebo najít algoritmus pro přiřazení proměnné v každé konkrétní situaci pomocí hotové příklady nebo si na jejich základě vytvořte vlastní. Tyto proměnné jsou zpravidla vytvářeny v aktuální relaci dávkovými soubory pomocí některých příkazů.

    Příklad přiřazení proměnných v souboru RunOnceEx.cmd, který importuje nastavení do registru

    CMD/BATCH:

    @echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100 REG ADD %KEY% /V TITLE /D "Instalace aplikací" /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

    V tomto skriptu příkaz SET nastavuje dvě proměnné - %i% A %KLÍČ%. Upozorňujeme, že jsou zadány bez symbolů procent, ale pro přístup k nim je již potřeba %%. Variabilní %KLÍČ% slouží ke zjednodušení a optimalizaci kódu. Zůstává nezměněn po celou aktuální relaci příkazu, což eliminuje potřebu pokaždé zahrnout klíč registru do kódu. Pokaždé, když se vyskytuje v kódu %KLÍČ%, bude nahrazena HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. A tady %i% se používá pro sekvenční číslování klíčů registru. S počáteční hodnotou 100 se proměnná po každém bloku příkazů zvýší o jedničku pomocí příkazu SET /A i+=1, což má za následek sekvenci 100, 101, 102 atd. Tedy čára

    Kód:

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

    vlastně takhle funguje

    Kód:

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

    Všimněte si, že fragment souboru také používá systémovou proměnnou %systemdrive%, což odpovídá písmenu systémové jednotky.

    Příklad přiřazení proměnných v dávkovém souboru, který instaluje aplikaci z CD:

    Kód:

    Pro %%i v (C D E F G H I J K L M N O P Q R S T U V W X Y Z) proveďte, pokud existuje, %%i:\WIN51, nastavte CDROM=%%i: start /čekejte „%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe“

    Tento příklad hledá konkrétní soubor (WIN51) pro všechny uvedené jednotky. Pokud je nalezen na jednom z disků, je tomuto disku přiřazena proměnná %CD ROM% a poté proběhne instalace software pomocí cesty dané vytvořenou proměnnou.

    Změna proměnných prostředí a přidávání vlastních proměnných

    Jak bylo uvedeno výše, působení proměnných, daný týmem sada je omezena na aktuální příkazovou relaci. Pokud chcete získat systémovou nebo uživatelskou proměnnou z dočasné proměnné, musíte ji zaregistrovat v registru. To lze také provést různými způsoby.

    utilita setenv
    Nástroj funguje z příkazového řádku (webová stránka, stažení). Práce s utilitou je velmi jednoduchá (setenv /?).


    Uživatelská nastavení|setenv -u hodnota název_proměnné
    Nastavení systému|setenv -m hodnota název_proměnné
    Nastavení Výchozí Uživatel|setenv -d hodnota varname
    Aktuální nastavení uživatelské relace|setenv -v hodnota varname

    Pokud například potřebujete získat proměnnou %temp% ve fázi instalace, můžete to udělat z cmdlines.txt , například:

    Kód:

    :: Vytváření a nastavení složky Temp... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp

    Utilita je pohodlná, protože po nastavení proměnné ji lze okamžitě používat. No, téměř okamžitě - v příštím týmovém sezení. Chcete-li jej použít v aktuální relaci, můžete použít starý známý příkaz set:

    Kód:

    :: Vytváření #EgOrus# var set EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus%

    Importujte nastavení do registru
    Pokud provedete změny v registru po prvním přihlášení, pak proměnné začnou "fungovat" až po restartu nebo ukončení uživatelské relace. Během procesu automatické instalace můžete samozřejmě importovat požadovaná nastavení na T-12 (viz článek Vylepšení registru) a obejít tento problém. Pokud nebudete přiřazenou proměnnou používat v aktuální uživatelské relaci, pak vám může vyhovovat i import do registru. Nebudu znovu popisovat proces importu souborů REG, ale zvážím příkaz REG ADD na konkrétním příkladu.

    Řekněme, že máte zájem mít v systému proměnnou %CD ROM% trvale a nainstalovat jej během instalace aplikací z CD. Podle výše uvedeného kódu ji po definování proměnné přiřaďte k systémové proměnné.

    CMD/BATCH:

    Pro %%i v (C D E F G H I J K L M N O P Q R S T U V W X Y Z) proveďte, pokud existuje, %%i:\WIN51, nastavte CDROM=%%i: REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% / F

    Po nalezení souboru WIN51 je jednotce, na které byl nalezen, přiřazena místní proměnná %CD ROM%, která je importováním do registru okamžitě přiřazena jako trvalá systémová proměnná. Tato metoda byla navržena v jednom z témat konference Oszone Sanja Alone. Zároveň jste zjistili. kde jsou v registru uložena nastavení systémových proměnných. Nastavení uživatelských proměnných jsou uložena v HKCU\Environment. Cesty vrácené proměnnými %PROGRAMFILES% a %COMMONPROGRAMFILES% lze zobrazit v nastavení ProgramFilesDir a CommonFilesDir v HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, ale neměly by se tam měnit. Instalační adresáře programu (jiné než %SystemDrive%\Program Files) musí být nakonfigurovány prostřednictvím souboru odpovědí.

    souhrn
    Příkazový shell systému Windows (cmd.exe) je velmi Výkonný nástroj pracovat se systémem. Dávkové soubory dokážou zautomatizovat značné množství úkolů, a proto se na ně často používá automatická instalace Okna. Dovedné použití proměnných v dávkových souborech umožňuje řešit širokou škálu problémů. Práce s shellem se stává efektivnější a zároveň zjednodušuje kód dávkových souborů. Další příklady použití proměnných najdete na stránkách webu nebo fóra. Všechny příklady použité v tomto článku jsou převzaty ze skriptů účastníků fóra OsZone.ru, za což jim patří velký dík.

    Terminologie
    příkazový shell
    - je samostatný software, který zajišťuje přímou komunikaci mezi uživatelem a operačním systémem. Text uživatelské rozhraní příkazový řádek poskytuje prostředí, ve kterém aplikace běží a obslužné programy s textovým rozhraním.

    cmd.exe- příkazový interpret, který příkazový shell Windows používá k překladu zadaného příkazu do formátu srozumitelného systému.

    Týmová relace lze spustit jako start cmd.exe nebo spuštěním dávkového souboru. Jinými slovy, je vytvořen aktuální příkazový shell. V souladu s tím ukončí výstup z tohoto shellu (například konec dávkového souboru) relaci příkazu.

    Uživatelská relace(uživatelská relace) začíná, když se uživatel přihlásí (přihlásí) a končí, když se uživatel odhlásí (odhlásí).

    Proměnné nastavují prostředí Cmd.exe. Předepisují nejen chování příkazového shellu, ale i samotného OS. Proměnné by měly být rozděleny do dvou typů, z nichž každá má jedinečné vlastnosti: systémové a místní. První typ umožňuje nastavit chování globálního prostředí OS v procesu práce. Místní proměnné nastavují aktivitu prostředí výhradně v konkrétní instanci Cmd.exe. To je třeba poznamenat jako klíčový rozdíl.

    Mluví o systémových proměnných, je předinstalovaný v OS a může být používán všemi aplikacemi. Chcete-li v nich provádět změny, musíte mít přístupová práva správce. Nejběžnějším případem použití je poskytnutí úlohy spuštění systému. Když se taková událost provádí pro konkrétního uživatele, můžeme mluvit o možnosti použití lokálních proměnných.

    Níže je uveden seznam existujících tříd proměnných na základě důležitosti jejich priority (v sestupném pořadí):

    • Vestavěný systém. Musí být nazývány nejzávažnějšími, což zajišťuje zvláštní pozornost v procesu práce.
    • Proměnné systémový pohled související s HKEY_LOCAL_MACHINE.
    • Proměnné místní pohled související s HKEY_CURRENT_USER.
    • Úplný seznam proměnných a prostředí naleznete v dokumentu Autoexec.bat.
    • Úplný seznam proměnných a prostředí nalezených ve spouštěcím skriptu systému. V určitých situacích tomu tak být nemusí.
    • Interaktivně aplikované proměnné pro psaný skript nebo dávkový dokument.

    Existuje poměrně dlouhý seznam proměnných, které patří do kategorie lokální nebo systémové. Této problematice je třeba věnovat více pozornosti.

    Lokální proměnné

    název Informace

    %ALLUSERSPROFILE%

    Poskytuje informace o tom, kde přesně se nachází profil Všichni uživatelé

    Poskytuje výchozí umístění pro programy

    Umožňuje získat cestu k použité složce

    Poskytuje příkazový řádek, který byl použit ke spuštění aktuální instance Cmd.exe

    Poskytuje název řadiče domény, který ověřuje danou relaci

    Umožňuje vám poskytnout možnosti CA pro skutečný interpret. Chcete-li získat přístup, musíte použít Cmd.exe

    Poskytuje název domény, která má seznam uživatelských účtů

    Poskytuje jméno uživatele, který se přihlásil do systému

    Vrátí pozici účtu pro aktuálního uživatele

    Systémové proměnné

    Umožňuje zadat číslo verze platných rozšíření obslužných rutin příkazů

    Poskytuje název zařízení, na kterém se práce provádí

    Vrátí cestu ke spustitelnému souboru skořápka

    Poskytuje platné informace. Je třeba poznamenat, že se předpokládá použití formátu podobného date /t. Všechny informace o zadaném příkazu lze získat přímo z příslušné sekce na webu

    Slouží k poskytnutí chybového kódu posledního použitého příkazu. Standardní situace je mít hodnotu, která je nenulová

    Poskytuje název disku pracovní stanice, který je přidružen k adresáři uživatele. Vyžaduje se instalace na základě umístění hlavního adresáře

    Poskytuje cestu k hlavnímu adresáři uživatele. Mělo by být nastaveno pomocí informací o umístění hlavního adresáře

    Poskytuje cestu ke sdílenému domovskému adresáři uživatele. Mělo by být nastaveno pomocí informací o umístění hlavního adresáře

    %NUMBER_OF_PROCESSORS%

    Určuje počet procesorů, které má konkrétní zařízení

    Předává informace o tom, jaké jméno má operační systém konkrétní zařízení. U některých typů OS existují určité funkce zobrazení názvu, které je třeba vzít v úvahu

    Nastavuje cestu hledání pro zjišťování programů

    Poskytuje seznam rozšíření dokumentu, která OS považuje za spustitelná

    %PROCESSOR_ARCHITECTURE%

    Používá se, když potřebujete získat architekturu konkrétního procesoru

    %PROCESSOR_IDENTFIER%

    Poskytuje krátké informace o procesoru

    %PROCESSOR_LEVEL%

    Poskytuje informace o čísle revize procesoru

    Poskytuje jakékoli celé číslo v rozsahu 0-32767 včetně

    Poskytuje název jednotky, na které je zapsán kořenový adresář systému Windows XP

    Poskytuje umístění adresáře systému OS

    Tyto proměnné jsou systémové a uživatelské proměnné. To vám umožní provádět stejné úkoly v různých situacích. Poskytuje dočasné složky, které mohou používat všichni uživatelé. Pro určité programy musíte použít TEMP nebo TMP.

    Poskytuje informace o aktuálním čase. Používá stejný formát zobrazení času /t.

    Umožňuje vrátit adresář OS

    Nastavení proměnných prostředí

    Chcete-li vytvořit, odstranit nebo zobrazit proměnnou prostředí, použijte speciální příkaz set. Výrazným rysem je úprava proměnných výhradně v prostředí aktuálního shellu.

    Pro vydání konkrétní proměnné se předpokládá zápis do CS:

    nastavit název_proměnné

    Přidání další proměnné se provede zápisem:

    set variablename=value

    Chcete-li provést postup odstranění, stojí za to předepsat řádek:

    nastavit název_proměnné=

    Systém je nastaven tak, aby používal většinu existujících znaků k označení v roli hodnot. Sem lze zařadit i prodely. Chcete-li použít určité znaky, musíte nejprve napsat (^) nebo je uzavřít do uvozovek. Pokud tak neučiníte, existuje možnost nesprávného provedení nebo chyby. Je třeba zvážit několik jednoduché příklady. Řekněme, že chceme vytvořit proměnnou new&name. Pro implementaci úlohy v pohledu se do CS zadá následující:

    set varname=new^&name

    Můžete zkusit nepoužívat speciální znak (^), ale nebude to možné. Důvodem je neustálé vydávání stejné chyby.

    Když je nastavena proměnná, nezáleží na tom, která písmena se použijí – velká nebo malá. K registru se nebude přihlížet. Existuje jeden rozlišovací znak- proměnná se bude stále zobrazovat přesně tak, jak byla zadána. To usnadňuje úkol vnímání, pokud používáte různé registry k rozlišení při psaní jmen.

    Substituce v proměnných prostředí

    Existuje způsob, jak provést náhradu určitých hodnot v proměnných prostředí přímo z CS nebo skriptu. Pro provedení úkolu se doporučuje použít umístění v symbolech procent. Vypadá to takto:

    %variable_name%

    Má to znamenat, že Cmd.exe musí okamžitě přistupovat k hodnotám konkrétní proměnné. Postup porovnání znaků po znaku nebude proveden. Je důležité mít na paměti, že samotná substituce není považována za rekurzivní. Ověření se provádí pouze jednou.

    02/12/15 21,1 tis

    Proč je ve světě takový chaos? Ano, protože správce našeho systému zapomněl na své povinnosti. Nebo jen ztratil seznam příkazů cmd z našeho světa. Ačkoli se jedná o poněkud originální pohled na stávající pořadí věcí, odráží to část pravdy, kterou potřebujeme: pomocí příkazového řádku můžete snadno vyčistit počítač:

    Co je příkazový řádek

    Příkazový řádek je nejjednodušším nástrojem pro správu operačního systému počítače. Správa probíhá pomocí řady vyhrazených příkazů a sady znaků textové klávesnice bez účasti myši ( v operačním systému Windows).

    Na systémech založených na UNIXu při práci s příkazový řádek lze použít myš.

    Některé příkazy k nám přišly z MS-DOSu. Příkazovému řádku se také říká konzole. Slouží nejen ke správě operačního systému, ale také ke správě pravidelné programy. Nejčastěji jsou do takové sady příkazů zahrnuty nejvzácněji používané příkazy.

    Výhoda použití cmd základní příkazy spočívá v tom, že spotřebovává minimální množství systémových prostředků. A to je důležité v případě nouze, kdy je zapojena veškerá síla počítače, tak či onak.

    cmd implementuje schopnost spouštět a vytvářet celé dávkové soubory, což je specifické pořadí, ve kterém se provádí řada příkazů (skriptů). Z tohoto důvodu je lze použít k automatizaci určitých úkolů ( správa účtů, archivace dat a další).

    Příkaz Shell Windows pro manipulaci a přesměrování příkazů na určité nástroje a nástroje operačního systému je interpret Cmd.exe. Načte konzolu a přesměruje příkazy ve formátu, kterému systém rozumí.

    Práce s příkazovým řádkem v operačním systému Windows

    Konzolu ve Windows můžete volat několika způsoby:


    Obě metody zahrnují spuštění konzoly jako aktuální uživatel. Tedy se všemi právy a omezeními, která jsou na jeho roli v operačním systému kladena. Pro spustit cmd s právy správce je třeba vybrat ikonu programu v nabídce Start a v kontextová nabídka vyberte vhodnou položku:


    Po spuštění nástroje můžete získat informace o pozadí o příkazech a formátu jejich zápisu do konzole. Chcete-li to provést, zadejte příkaz nápovědy a stiskněte „ Enter»:

    Základní příkazy pro práci se soubory a adresáři

    Nejčastěji používané příkazy jsou:

    • RENAME - přejmenování adresářů a souborů. Syntaxe příkazu:

    PŘEJMENOVAT | REN [jednotka/cesta] původní název souboru/adresáře | koncový název souboru
    Příklad: PŘEJMENOVAT C:UsershomeDesktoptost.txt test.txt

    • DEL (ERASE) - slouží k mazání pouze souborů, nikoli adresářů. Jeho syntaxe je:

    DEL | VYMAZAT [způsob zpracování] [název souboru]
    Příklad: Del C:UsershomeDesktoptest.txt/P

    Metoda zpracování je speciální příznak, který umožňuje implementovat určitou podmínku při mazání souboru. V našem příkladu příznak "P" umožňuje zobrazení dialogového okna oprávnění pro smazání každého souboru:


    Další informace o možných hodnotách parametru „metoda zpracování“ viz technická dokumentace na operačním systému Windows.

    • MD - umožňuje vytvořit složku na zadané cestě. Syntax:

    MD [jednotka:] [cesta]
    Příklad:
    MD C:UserhomeDesktoptest1test2

    Příklad vytvoří podsložku test2 ve složce test1 . Pokud jedna z kořenových složek cesty neexistuje, bude také vytvořena:

    • R.D. ( RMDIR) - odstranit konkrétní složku nebo všechny adresáře v zadané cestě. Syntax:

    RD | RMDIR [klíč_procesu] [jednotka/cesta]
    Příklad:
    rmdir /s C:UsershomeDesktoptest1test2

    V příkladu je použit příznak s, který způsobí smazání celé větve adresářů zadaných v cestě. Proto byste neměli zbytečně používat příkaz rmdir s tímto přepínačem zpracování.

    V další části se blíže podíváme na síťové příkazy cmd.

    Síťové příkazy

    Příkazový řádek umožňuje ovládat nejen souborový systém PC, ale také síťové schopnosti. Část síťové příkazy konzole v ceně velký počet operátory k monitorování a testování sítě. Nejrelevantnější z nich jsou:

    • ping - příkaz slouží ke sledování možností internetové připojení PC. Vzdálený počítač odešle se nastavený počet paketů a pak se jim pošle zpět. Zohledňuje se doba přenosu paketů a procento ztrát. Syntax:

    ping [-t] [-a] [-n počet] [-l velikost] [-f] [-i TTL] [-v typ] [-r počet] [-s počet] [(-j seznam hostitelů | - k hostlist)] [interval -w] [název_cílového_PC]

    Příklad implementace příkazu:
    ping example.microsoft.com
    ping -w 10000 192.168.239.132

    V posledním příkladu příkazu cmd ping je požadavek odeslán do cíle se zadanou IP adresou. Interval mezi pakety je 10 000 (10 sekund). Ve výchozím nastavení je tento parametr nastaven na 4000:

    • tracert - používá se k určení síťové cesty k určenému zdroji odesláním speciální echo zprávy prostřednictvím protokolu
    • ICMP (Control Message Protocol). Po spuštění příkazu s parametry se zobrazí seznam všech routerů, přes které cesta zprávy prochází. Prvním prvkem v seznamu je první router na straně požadovaného zdroje.

    Syntaxe traceru příkazu cmd je:
    tracert [-d] [-h max_hops] [-j seznam_hostitelů] [-w interval] [název_cílového_zdroje]
    Příklad implementace:
    tracert -d -h 10 microsoft.com

    Příklad sleduje cestu k zadanému prostředku. To zvyšuje rychlost operace díky použití parametru d, který zabraňuje příkazu ve snaze získat oprávnění ke čtení IP adres. Počet přechodů (skoků) je omezen na 10 použití nastavená hodnota parametr h. Ve výchozím nastavení je počet skoků 30:


    vypnutí [(-l|-s|-r|-a)] [-f] [-m [\PCName]] [-t xx] [-c "zprávy"] [-d[u][p]: xx:yy]
    Příklad:
    vypnutí /s /t 60 /f /l /m \191.162.1.53

    Po 60 sekundách (t) dojde k vypnutí (y) vzdáleného PC (m) se zadanou IP adresou (191.162.1.53). To vás donutí odhlásit se ze všech aplikací ( f ) a aktuální uživatelské relace ( l ).