O meni:

Sem še relativno mlad (v '30 letih) inženir informatike iz Ljubljane. Teme, ki me najbolj zanimajo: dogodki po svetu (novice, politika), zgodovina, znanost (sploh vesolje)

Nova znanja o uporabi t.i. batch fajlov

Včeraj sem po kar dolgem času spet odprl “Help and Support Center”, ki ga zaženeš s “HelpCtr.exe”, in preden sem šel poiskati tisto, kar sem v prvi vrsti potreboval (in kar je bil razlog, da sem sploh zagnal ta program), sem se malo ustavil še pri poglavju “Batch files“. Kot morda nekateri že veste, sem sam velik ljubitelj vseh možnih vrst skriptov in avtomatizacije vobče, pri čemer sem jasno najbolj seznanjen z uporabo batch fajlov v MS Windows okolju. Sedaj, že dolgo časa uporabljam batch fajle za marsikaj (zaganjanje programov, kopiranje, brisanje fajlov itd.), se pa nikoli nisem preveč posvečal bolj napredni uporabi le-teh, čeprav sem vedel, da dodatne možnosti pri uporabi “batch processing-a” obstajajo (konkretno t.i. “conditional” ukaz “If“, ali pa ukaz “For“) in te sem tokrat malo bolj poglobljeno preštudiral.

Skratka, če bi tudi vi radi našli to poglavje, potem v “Search” input-text prostor vtipkajte besedo “batch“, v rezultatih iskanja pa boste lahko našli poglavje “Batch files“. Če vas pa zanimajo druge objave na tem mojem blogu, v katerih sem kakorkoli omenil batch fajle, potem pa kliknite semle iskanje: batch. Sem spodaj pa dodajam še definiciji za pojma “script” in “batch program”, kakor sta definirana v “Glossary” delu.

script

A type of program consisting of a set of instructions to an application or tool program. A script usually expresses instructions by using the application’s or tool’s rules and syntax, combined with simple control structures such as loops and if/then expressions. “Batch program” is often used interchangeably with “script” in the Windows environment.

batch program

An ASCII (unformatted text) file that contains one or more operating system commands. A batch program’s file name has a .cmd or .bat extension. When you type the file name at the command prompt, or when the batch program is run from another program, its commands are processed sequentially. Batch programs are also called batch files.

V nadaljevanju objave pa sem razdelil glavne reči (ukaze in parametre oz. dele parametrov) pri uporabi programa “Cmd.exe” in batch fajlov na tri glavne točke.

1. VARIABLES (ali spremenljivke)

Pri uporabi Windows-ovega programa “Cmd.exe” (ali t.i. “command prompt” oz. “DOS okno”) in batch fajlov poznamo t.i. “batch parameter expansion variables”.

Tule je par primerov: “%0“, “%1“, “%2“, “%*” (tu pri zadnjem je uporabljan znak “*” ali t.i. “wildcard” oz. “wildcard reference”)

Z njimi pa se uporablja tudi t.i. “modifiers” (torej v batch parametrih), ki uporabljajo informacije npr. o drajvu in direktoriju, da razširijo batch parameter kot delno ali celotno ime fajla ali direktorija. Uporablja se jih tako, da za znakom za “percent” (%), ki mu sledi znak tilde (~), vtipkaš željen “modifier” (torej, “%~modifier“), dalje pa ostajajo tudi t.i. “modifiers and qualifiers”, pri čemer ti takozvani “qualifiers” še dodatno razširijo nalogo, ki jo imata nek variable in uporabljen modifier.

Tule je par primerov: “%~1” (razširi “%1” in umakne znake za “quotanje”), “%~f1” (razširi “%1” v ime t.i. “poti” na trdem disku), “%~d1” (razširi “%1” v črko drajva), “%~p1” (razširi “%1” v t.i “pot” na trdem disku), “%~n1” (razširi “%1” v ime fajla), “%~x1” (razširi “%1” v fajlovo končnico oz. po angl. “extension”) in pa še par primerov modifier-jev in qualifier-jev skupaj: “%~dp1“, ki razširi “%1” v črko drajva in t.i. “pot”, “%~nx1“, ki razširi “%I” v ime fajla in njegovo končnico).

In pa še dva primera uporabe zgoraj opisanega oz. primera dejanske kode v batch fajlu.

xcopy %1*.* %2

Najprej gre za fajl npr. poimenovan “batfile.bat”, za zagon le-tega pa moraš v “Cmd.exe” napisati: “batfile.bat C:folder1 D:folder2” (enako, kot če bi v “Cmd.exe” vpisal tole: “xcopy C:folder1 *.* D:folder2“), medtem ko je tole spodaj dejanska koda v tem batch fajlu.

start “” /ABOVENORMAL %1

V tem drugem primeru pa imamo spet fajl poimenovan “batfile.bat“, nato pa ustaviš t.i. “shortcut” (oz. po angl. link, toej fajl z .lnk končnico), ki kaže nanj in jo daš v “Send To” datoteko. Zaženeš pa ga tako, da klikneš z desnim miškim gumbom na nek program (torej njegov glavni .exe fajl), ki ga hočeš v tem primeru zagnati z “ABOVENORMAL” proces prioriteto in ga “pošlješ” v omenjeni “shortcut”. Tole spodaj pa je koda v tem batch fajlu.

2. REDIRECTS (ali preusmerniki)

Spet, pri uporabi batch fajlov zelo prav pridejo tudi t.i. “command redirection operators”, ki preusmerijo input/output iz njihovih privzetih lokacij nekam drugam, konretno, recimo preusmerijo output v nek fajl, ali pa npr. prikažejo tipkovničin input v “Cmd.exe” oknu.

Tule je par primerov: “>“, “<“, “>>“, “>&“, “><&“, “|

Pri njih pa si dodatno lahko pomagamo tudi z uporabo t.i. “handles”, to je oznak za različne vrste inputa/outputa, katerih t.i. “numeric equivalent” (1-9) lahko potem uporabiš v batch fajlu. Zato moraš za preusmeritev uporabiti ampersand (&) znak, ki mu sledi številka, ki predstavlja “handle”, ki jo hočeš preusmeriti (torej “&handle#“) nekam drugam.

Tule je par primerov: “STDIN” (numeric equivalent: 0, pomeni “Keyboard input”), “STDOUT” (numeric equivalent: 1, pomeni “Output to the Command Prompt window”), “STDERR” (numeric equivalent: 2, pomeni “Error output to the Command Prompt window”), “UNDEFINED” (numeric equivalents: 3-9, te so definirane individualno)

Ponovno dodajam dva primera uporabe zgoraj opisanega (primera dejanske kode)

dir /N *.* > B:dirlist.txt

Najprej gre za ukaz (v tem primeru uporabljen v “Cmd.exe” in ne v batch fajlu), ki v “dirlist.txt” fajl preusmeri output ukaza “dir /N *.*” (torej lista fajlov in direktorijev z dolgimi imeni oz. imeni ne po 8.3 standardu) v “dirlist.txt” fajl.

1<&2

Ta drugi primer pa je primer preusmeritve (s “<” preusmernikom) “handle 2” oz. “STDERR”, v “handle 1” oz. “STDOUT”.

3. COMMANDS (ali komande oz. ukazi)

Najbolj znane in konec koncev tudi najbolj pomemben del uporabe batch fajlov (oz. “Cmd.exe” okna) pa predstavljajo t.i. “commands”, pri čemer so nekatere t.i. “internal commands” (kot so npr. “Del“, “Dir“, “More“, “Start“, “Call“, “Type“, “Echo“) druge pa so programi, torej čisto navadni .exe fajli (ali pa .com, kot npr. v primeru “Tree” ukaza), večinoma licirani v “%systemroot%system32” direktoriju.

Tule je nekaj primerov: “Xcopy“, “Find“, “Sort“, “Call” , “Echo“, “Endlocal“, “Pause“, “Rem“, “Setlocal“, “Shift“, “Goto“, “If” (ki ima tudi sam veliko dodatnih možnosti, to so operatorji “EQU” oz. equal to, “NEQ” oz. not equal to, “LSS” oz. less than, “LEQ” oz. less than or equal to, “GTR” oz. greater than, “GEQ” oz. greater than or equal to) “For” (tudi ta ima sam veliko dodatnih možnosti, to so t.i. “keywords” kot npr. “eol=c“, ki označi konec vrstice, torej LF oz. CR znak, ali “skip=n“, ki določi število vrstic, ki se naj jih preskoči na začetku fajla, potem sledijo “variables with modifiers”, kot npr. “%~I“, ki razširi “%I”, kateri umakne znake za “quotanje”, ali pa “%~fI“, ki razširi “%I” v ime t.i. “poti”, in pa še “variables with combined modifiers”, kot npr. “%~dpI“, ki razširi “%I” samo v črko drajva in t.i. “pot”, in pa “%~nxI“, ki razširi “%I” samo v ime fajla in njegovo končnico)

In spet trije primeri uporabe zgoraj opisanega oz. primeri dejanske kode; tokrat gre v obeh primerih za ukaz “if exist“.

if exist dirlist.txt sort<dirlist.txt

Najprej gre za ukaz (spet, uporabljen v “Cmd.exe” in ne v batch fajlu), ki v “Cmd.exe” oknu prikaže vsebino “dirlist.txt” fajla (sortirano po abecedi, v tem primeru fajli in direktoriji, zaradi “sort” ukaza), seveda, samo če le-ta obstaja v direktoriju, v katerem je trenutno “Cmd.exe”.

if exist *.txt echo The folder contains .txt files.

Potem gre za ukaz, ki v “Cmd.exe” oknu izpiše sporočilo “The folder contains .txt files” v primeru, če v direktoriju, v katerem je trenutno “Cmd.exe”, res obstaja kakšen .txt fajl.

if not exist dirlist.txt echo The folder doesn’t contain dirlist.txt file.

In še obratno od zgornjega primera, torej gre za ukaz, ki v “Cmd.exe” oknu izpiše sporočilo “The folder doesn’t contain dirlist.txt” (lahko bi sicer dal identično nasproten primer, torej ne za “dirlist.txt” fajl ampak za “*.txt”, torej katerikoli .txt fajl) v primeru, če v direktoriju, v katerem je trenutno “Cmd.exe”, obstaja ta “dirlist.txt” fajl.

Tadej

Advertisements


Oddajte komentar

Fill in your details below or click an icon to log in:

WordPress.com Logo

Komentirate prijavljeni s svojim WordPress.com računom. Odjava / Spremeni )

Twitter picture

Komentirate prijavljeni s svojim Twitter računom. Odjava / Spremeni )

Facebook photo

Komentirate prijavljeni s svojim Facebook računom. Odjava / Spremeni )

Google+ photo

Komentirate prijavljeni s svojim Google+ računom. Odjava / Spremeni )

Connecting to %s