Как да напишем пакетни скриптове на Windows
Знаете ли как да използвате командния ред? Ако го направите, можете да напишете команден файл. В най-простата си форма пакетният файл (или пакетния скрипт) е списък от няколко команди, които се изпълняват, когато щракнете два пъти върху файла. Пакетните файлове вървят чак до DOS, но все още работят с модерни версии на Windows.
Скриптовете на PowerShell и скриптовете на Bash може да са по-мощни, но пакетните файлове все още могат да бъдат много полезни, ако трябва да изпълните основни команди на Windows.
Основи на пакетните файлове
Пакетният файл е просто текстов файл, записан с разширение .bat. Можете да напишете с помощта на Notepad или по-усъвършенстван текстов редактор като Notepad ++, но не използвайте текстообработваща програма като Microsoft Word.
Нека създадем обикновен команден файл. Първо отворете Notepad. Въведете в него следните редове:
ECHO OFF ECHO Здравейте, свят Пауза
След това запишете файла, като щракнете върху Файл> Запиши. Дайте му всяко име, което желаете, но заменете разширението .txt по подразбиране с разширение .bat.
Например, може да искате да го наименувате hello_world.bat
.
Вече имате партиден файл с разширение .bat. Кликнете два пъти върху него, за да го стартирате. Този конкретен пакетен файл задава изключване на ECHO (което изчиства изхода чрез скриване на командите да не се отпечатва в реда, отпечатва текста "Hello World" на екрана, след което изчаква да натиснете клавиш, преди да приключи..
Ако не сте добавили PAUSE
към файла, партидният файл просто ще изпълни командите му и след това автоматично ще се затвори. В този случай той ще отпечата „Hello World“ в прозореца и веднага ще затвори прозореца на командния ред. Когато искате бързо да изпълнявате команди, без да виждате изхода, можете да пропуснете това. Ако изпълнявате няколко команди, можете да поставите PAUSE
между тях.
Писане на по-сложен пакетен файл
Принципно е просто да се създаде команден файл. Единственото нещо, което трябва да промените е това, което въвеждате в Notepad. За да стартирате няколко команди, напишете всеки от тях на свой ред и командния файл ще се изпълнява всеки.
Например, нека кажем, че искаме да напишем партиден файл, който изпълнява няколко мрежови диагностични команди. Може да искаме да бягаме ipconfig / всички
за да видите информация за мрежата, пинг google.com
за да проверите дали сървърите на Google отговарят и tracert google.com
да стартирате traceroute към google.com и да видите дали има някакви проблеми по пътя.
В най-основната форма можем просто да поставим всичките тези команди в команден файл, един след друг, така:
ipconfig / всички пинг google.com tracert google.com ПАУЗА
Когато стартираме този файл, ще видим изхода на всяка команда веднага след другата. Но това не е задължително идеалният начин да напишете команден файл.
Например, може да искате да добавите редове за коментари. Всяка линия, която започва с a ::
е линия за коментари и няма да бъде изпълнена. Това ги прави полезен начин да обяснят какво се случва във файла за всеки, когото можете да дадете - или за бъдещото ви аз, който може да забрави защо поставяте определена команда там.
Може също да искате да добавите командата “ECHO OFF” в началото на файла. Обикновено това се добавя към началото на повечето пакетни файлове. Когато направите това, командите няма да бъдат отпечатани в командния ред, но резултатите ще бъдат. Например ще видите подробностите за мрежовата връзка, но не и реда "ipconfig / all". Повечето хора не искат да видят командите, така че това може да изчисти изхода.
Ето какво може да изглежда така:
:: Този партиден файл проверява за проблеми с мрежовата връзка. ECHO OFF :: Преглед на подробности за връзката с мрежата ipconfig / all :: Проверете дали Google.com е достъпен пинг google.com :: Стартирайте traceroute, за да проверите маршрута до Google.com tracert google.com PAUSE
Има и други упътвания, които можете да използвате с такъв пакет. Например, може да поискате да изпълните командите си, а след това да изхвърлите продукцията в текстов файл, който можете да видите по-късно. За да направите това, бихте използвали >>
оператор след всяка команда, за да добави своя изход към текстовия файл. Тъй като ще прочетем изхода от текстовия файл, можем да пропуснем PAUSE
команда.
:: Този команден файл проверява за проблеми с мрежовата връзка :: и записва изхода в .txt файл. ECHO OFF :: Преглед на подробности за връзката с мрежата ipconfig / all >> results.txt :: Проверете дали Google.com е достъпен пинг google.com >> results.txt :: Стартирайте traceroute, за да проверите маршрута до Google.com tracert google. com >> results.txt
След като стартирате горния скрипт, ще намерите файл с име results.txt в същата папка като пакетния файл с изхода на командите. Прозорецът за командния ред автоматично ще се затвори, след като командния файл бъде изпълнен.
Примерът, който използваме по-горе, разчита на действително отпечатване на информация в командния ред, така че потребителят да може да го прочете. Въпреки това, много партидни файлове са проектирани да се изпълняват неинтерактивно. Например, можете да имате команден файл, който изтрива множество файлове или директории, когато го кликнете два пъти. Трябва само да използвате дел
команда за изтриване на файлове или deltree
команда за изтриване на директории. Не забравяйте, че просто използвате същите команди, които бихте изпълнили в прозореца на командния ред.
По същество това е смисълът на повечето партидни файлове - да изпълняват само няколко команди едно след друго. Пакетните файлове обаче могат да бъдат значително по-сложни от това. Например, можете да използвате "IF" отчети заедно с командата "GOTO", за да проверите стойността на нещо и след това да прескочите до различни линии в зависимост от резултата. Това е по-скоро като писане на малка програма, отколкото бърз и мръсен скрипт. Това е една от причините, поради които .bat файловете понякога се наричат "пакетни програми". Ако искате да направите нещо по-сложно, ще намерите много ръководства за извършване на конкретни неща с онлайн програмиране на партиди. Но сега, вие знаете основите на това как да хвърлите едно просто.