Команды в bat файле: Команда для запуска файла .bat

Содержание

Команда для запуска файла .bat

"F:\- Big Packets -\kitterengine\Common\Template.bat" может предшествовать call (см. call /? ). или Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat .


CMD Шпаргалка

  • Cmd.exe

  • Получение Помощи

  • Пунктуация

  • Именование Файлов

  • Запуск Программ

  • Ключи

CMD.exe

Первое, что нужно запомнить, — это способ работы с компьютером. Так мы делали до того, как WIMP (Windows, Значки, мышь, всплывающие меню) стали обычным явлением. Он обязан своими корнями CPM, VMS и Unix. Он использовался для запуска программ, копирования и удаления файлов. Также вы можете изменить время и дату.

Для справки о запуске CMD введите cmd /? . Вы должны запустить его с помощью переключателя /k или

/c , если только вы не хотите просто ввести его.

Получение Помощи

Для общей помощи. Введите Help в командной строке. Для каждой команды в списке введите help <command> (например, help dir ) или <command> /? (например, dir /? ).

Некоторые команды имеют субкоманды. Например schtasks /create /? .

Помощь команды NET необычна. Ввод net use /? -это краткая справка. Введите net help use для получения полной справки. То же самое относится и к корню — net /? также является краткой справкой, используйте net help .

Ссылки в справке о новом поведении описывают изменения от CMD в OS/2 и Windows NT4 до текущего CMD, который находится в Windows 2000 и более поздних версиях.

WMIC -это многоцелевая команда. Тип wmic /? .


Пунктуация

&    seperates commands on a line.     escapes any of the above, including itself, if needed to be passed 
to a program

"    parameters with spaces must be enclosed in quotes

+ used with copy to concatenate files. E.G. copy file1+file2 newfile

, used with copy to indicate missing parameters. This updates the files 
modified date. E.G. copy /b file1,,

%variablename% a inbuilt or user set environmental variable

!variablename! a user set environmental variable expanded at execution 
time, turned with SelLocal EnableDelayedExpansion command

%<number> (%1) the nth command line parameter passed to a batch file. %0 
is the batchfile's name.

%* (%*) the entire command line.

%CMDCMDLINE% - expands to the original command line that invoked the
Command Processor (from set /?).

%<a letter> or %%<a letter> (%A or %%A) the variable in a for loop. 
Single % sign at command prompt and double % sign in a batch file.

\\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming.

: (win.ini:streamname) accesses an alternative steam.
Also separates drive from rest of path. . (win.ini) the LAST dot in a file path separates the name from extension . (dir .\*.txt) the current directory .. (cd ..) the parent directory \\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off.

Имена Файлов

< > : " / \ | Reserved characters. May not be used in filenames.



Reserved names. These refer to devices eg, 

copy filename con 

which copies a file to the console window.

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, 

COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, 

LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9

CONIN$, CONOUT$, CONERR$

--------------------------------

Maximum path length              260 characters
Maximum path length (\\?\)      32,767 characters (approx - some rare characters use 2 characters of storage)
Maximum filename length        255 characters

Запуск программы

См. start /? и call /? для получения помощи по всем трем способам.

Существует два типа программ Windows — консольные или не консольные (они называются GUI, даже если у них его нет). Консольные программы присоединяются к текущей консоли или Windows создает новую консоль. GUI программы должны явно создавать свои собственные windows.

Если полный путь не задан, то Windows выглядит в

  1. Каталог, из которого загружено приложение.

  2. Текущий каталог для родительского процесса.

  3. Windows NT/2000/XP: 32-разрядный системный каталог Windows. Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу. Имя этого каталога-System32.

  4. Windows NT/2000/XP: 16-разрядный системный каталог Windows. Нет никакой функции, которая получает путь к этому каталогу, но он ищется. Имя этого каталога-System.

  5. Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.

  6. Каталоги, перечисленные в переменной среды PATH.

Укажите имя программы

Это стандартный способ запуска программы.

c:\windows\notepad.exe

В batch file пакет будет ждать выхода программы. При вводе командная строка не ожидает выхода графических программ.

Если программа является элементом управления batch file, то передается и rest вызывающего batch file не выполняется.

Используйте команду «Пуск»

Start запускает программы нестандартными способами.

start "" c:\windows\notepad.exe

Start запускает программу и не ждет. Консольные программы запускаются в новом окне. Использование переключателя /b заставляет консольные программы помещаться в одно и то же окно, что сводит на нет основную цель запуска.

Start использует Windows графический shell — то же самое, что и ввод WinKey + R (диалоговое окно запуска). Попробуй

start shell:cache

Кроме того, имена программ, зарегистрированные в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths , также могут быть введены без указания полного пути.

Также обратите внимание, что первый набор кавычек, если таковые имеются, _ — это заголовок окна.

Используйте команду вызова

Вызов используется для запуска пакетных файлов и ожидания их выхода и продолжения текущего batch file.

Другие имена файлов

Ввод имени файла, не являющегося именем программы, аналогичен двойному щелчку по файлу.


Ключи

Ctrl + C завершает работу программы, не выходя из окна консоли.

Для других клавиш редактирования введите Doskey /? .

  • и команды вызова

  • ESC очищает командную строку

  • F7 отображает историю команд

  • ALT + F7 очищает историю команд

  • F8 история команд поиска

  • F9 выбирает команду по номеру

  • ALT + F10 очищает определения макросов

Также не указан

  • Ctrl + или Перемещает слово за раз

  • Ctrl + Backspace Удаляет предыдущее слово

  • Home Начало строки

  • End Конец строки

  • Ctrl + End Удаляет до конца строки

Запуск bat при старте windows

Использование готовых пакетных файлов является прекрасной альтернативой ручному выполнению команд в командной строке. Однако в некоторых случаях пользователи могут столкнуться с ограничениями применения скриптов форматов CMD или BAT. Обойти это ограничение можно, сконвертировав скрипт в исполняемый файл формата EXE. Полученный экзешник выполняет те задачи, что и скрипт, хотя сам процесс исполнения может отличаться.

Например, если EXE-файл выполняется в фоновом режиме, пользователь не сможет получить данные, которые при выполнении CMD-скрипта должны выводиться в графическом интерфейсе командной строки. Но как правило, с подобным явлением приходится встречаться редко, тем более, что скрипт может быть изменен таким образом, что данные будут выводится вне консоли.

Утилит, предназначенных для конвертирования «батников» существует достаточно много. Если вы опытный пользователь, имеющий представление о языке интерпретатора CMD(хотя в целом знать его необязательно), вам подойдёт утилита Bat To EXE. Если же вы собираетесь ограничиться простым конвертированием пакетного файла, воспользуйтесь портативной тулзой BAT 2 EXE.

Bat To EXE поддерживается конвертирование, создание и редактирование скриптов отдельно до

32- и 64-битных систем, добавление в исполняемый файл иконки, дополнительных сведений о версии, реализация возможности запуска EXE-файла с правами администратора, а также выполнение в фоновом (скрытом) режиме. BAT 2 EXE намного проще. По большому счету всё что умеет делать инструмент, это преобразовывать BAT- и CMD-скрипты в EXE-файлы.

После первого запуска утилита попросит указать каталог с конвертируемым скриптом и запросит разрешение на выполнение процедуры. Чтобы начать процесс конвертирования батника, ведите в консольном интерфейсе BAT 2 EXE «y» и нажмите ввод. Также потребуется указать выходной каталог для сохранения результата. Полученный экзешник будет иметь то же имя, что и скрипт.

Скачать BAT 2 EXE можно с официального сайта автора

www.bat2exe.net, более мощный Bat To EXE доступен для скачивания с сайта www.f2ko.de/en/b2e.php.

При работе на компьютере часто возникает необходимость повтора одних и тех же DOS-команд для осуществления периодически исполняемых действий, построения сложной и многоуровневой последовательности исполняемых команд или приложений, автоматизации работы с приложениями и файлами с участием или в отсутствие пользователя. В операционной системе есть возможность записать несколько команд в bat-файле. При этом, просто запуская данный командный файл (часто его называют скрипт, или просто «батник»), можно осуществлять выполнение прописанных команд, а прописав его в событиях планировщика Windows, можно автоматизировать этот процесс.

Особенностью файлов данного типа является отсутствие внутри какого-либо кода — имеется только тактовая информация, которую считывает и исполняет командный DOS-процессор, совместимый практически со всеми версиями операционной системы Windows. Одним из ярких примеров является файл autoexec.bat, который необходим для запуска этой ОС, так как именно он осуществляет ее настройки в ходе запуска.

Основные возможности командных файлов

Команды, которые содержит bat-файл, по функционалу можно условно разделить на несколько групп:

Выполнение командных файлов

Запуск bat-файлов можно осуществить различными способами. При работе в командной строке в текущем каталоге можно просто вводить имена файлов с дополнительными параметрами или без них. При этом команды bat-файлов после запуска будут выполняться последовательно друг за другом, уже без вмешательства пользователя.

При нахождении командного файла в другом каталоге необходимо кроме полного имени этого файла прописать полный путь до каталога его хранения. Расширение файла также можно не прописывать. Например, текущий каталог d:photowork, а командный файл vera.bat, который нужно выполнить с параметрами resize.doc и /p, находится в каталоге d:photohome. Тогда для того, чтобы осуществился запуск нашего файла, нужно прописать команду d:photohomevera resize.doc /p или команду ..homevera resize.doc /p.

Прерывание работы

Исполняемые после запуска команды bat-файлов можно прервать комбинациями кнопок <ctrl>+<break> и <ctrl>+<c>. На дисплее появится запрос на прерывание выполнения командного файла с запросом, ожидающим ввода Yes или No. Если ввести Y, то выполнение прервется, а оставшийся список команд bat-файла будет проигнорирован. Если введете символ N, то выполнение продолжится со следующей команды из списка.</c></ctrl></break></ctrl>

Вызов другого командного файла

Bat-файлы могут содержать в себе ссылки на исполнение других скриптов. Если просто прописать в теле скрипта bat-файл, команды после него уже исполняться не будут, так как управление передается на другой батник и будут выполнены команды уже из него. Если требуется возврат после запуска внутреннего файла, то его можно вызвать командой CALL. Формат команды выглядит так: CALL имя-бат-файла [параметры запуска].

Параметрами, которые передаются вызываемому командному файлу (файлам), обычно являются символы %1 — %9. Когда команды bat-файлов все последовательно будут пройдены, продолжится выполнение исходного скрипта со следующей строки.

Пошаговое выполнение

Бывают случаи, когда команды bat-файлов нужно выполнить пошагово (с остановкой после каждой строчки). Наиболее часто такой режим требуется при отладке или тестировании скриптов. Написание команды выглядит так: COMMAND /y/c имя _скрипта [параметры].

При выполнении на каждую команду будет выдаваться запрос Y или N. Если требуется выполнение команды — жмем клавишу Enter или Y. Если нужно пропустить команду — жмем ESC или N.

Отключение и включение вывода команд на экран

Когда запускается bat-файл, команды построчно перед выполнением отображаются на экране и после этого выполняются. Иногда это вызывает неудобство, так как при большом батнике команды длинным списком пробегают перед пользователем на экране, а иногда требуется их показ, например, для диалога или отладки. Чтобы bat-файл команды выводил на дисплей, применяется команда ECHO ON. Для отключения этого режима нужно ввести ECHO с параметром OFF. При этом все исполняемые далее команды показываться на экране уже не будут.

Для отключения вывода только какой-либо одной строки батника на экран можно использовать в самом начале этой строки символ @. Чаще всего этот символ можно встретить в паре с командой @ECHO OFF для исключения вывода ее на дисплей монитора. Такой режим часто используют злоумышленники, создавая на основе bat-файлов вирусы или доставляя мелкие и крупные неприятности пользователям компьютеров.

Сообщения при исполнении команд

Если после команды ECHO будут расположены символы, отличные от ON или OFF, то они будут выводиться на экран в любом режиме. Если ECHO будет без параметров, то она выдает на экран состояние режима отображения исполняемых команд — включен или выключен.

При желании можно воспроизвести даже звуковой сигнал (писк) компьютера, используя bat-файл. Команды, примеры которых приведены далее, основаны на операторе ECHO с добавлением специальных символов.

Для воспроизведения звукового сигнала нужно вывести стандартный символ с кодом 7. Сделать это можно, нажав клавишу <alt> и «7» на цифровой клавиатуре (с надписью home).</alt>

Для того чтобы повысить удобочитаемость сообщений можно применить команду ECHO с параметром «.» (она ставится сразу за командой без пробела) или специальным символом с кодом 255. На экране это будет выглядеть как пустая строчка.

Команду ECHO можно использовать для вывода сообщений в отдельный файл. Суть ее состоит в перенаправлении вывода сообщений на запись в файл, а не на экран монитора. Для сохранения логов, анкетирования, записи событий можно использовать пакетные файлы bat. Команды вывода имеют следующий формат:

— ECHO-сообщение >> имя файла — команда добавляет строчку в конец существующего файла. Если такого файла в данной директории нет, то создается новый файл.

— ECHO-сообщение > имя файла — этой командой создается новый файл, и в него записывается текущая строчка. В случае наличия такого файла в текущей директории, содержимое его будет удалено и записана команда или ее результат.

Использование комментариев

Для удобства редактирования скриптов используется команда REM. Все находящиеся после нее команды bat-файлов Windows игнорирует при исполнении. Их можно увидеть при редактировании и при пошаговом режиме. Во всех других случаях комментарии на экран выводиться не будут.

Команда задержки в bat-файле

Иногда во время выполнения батника возникает необходимость временно остановить исполнение команд, например, для ожидания реакции пользователя, для увеличения времени на прочтение длинного сообщения, для вставки диска, подтверждения присутствия пользователя или для отладки пакетного файла. Команда задержки в bat-файле пишется как PAUSE без параметров. При этом на дисплее отобразится сообщение типа «Нажмите любую клавишу для продолжения», и выполнение скрипта будет приостановлено до нажатия кнопки клавиатуры. Если будет нажата комбинация <ctrl>+<break> или <ctrl>+<c>, то система воспримет это как завершение работы исполняемого файла и выдаст запрос на подтверждение завершения его работы: «Прервать выполнение командного файла? (Y/N)». Если нажать клавишу Y, то произойдет прерывание работы скрипта в этом месте и все оставшиеся невыполненные команды будут проигнорированы. При нажатии N выполнение будет продолжаться со следующей команды. При паузе нажатие любых других буквенно-цифровых клавиш, а также «Пробел» и «Ввод» выполнение исполняемого файла будет продолжаться со следующей команды.</c></ctrl></break></ctrl>

Выполнение команды для списка файлов

Для последовательного исполнения нескольких файлов из списка, находящихся в одной директории, также можно использовать bat-файл. Команды «запуск программы по названию» и «запуск программы по расширению файла» часто могут помочь с автоматизацией обработки документов, например сортировка вложений почты. Отличаются они параметрами для команды FOR. Формат написания ее приведен ниже:

— FOR %x IN (список файлов) DO команда, где:

— х — любой символ, за исключением цифр от 0 до 9;

— список — разделенные пробелами имена файлов или название одного файла; при этом можно использовать спецсимволы «?» и «*» для замены от одного до нескольких знаков в названии файлов;

— команда — любая DOS-команда или программа, кроме FOR; если есть необходимость использования FOR, то вместо %x нужно указать %%x.

При использовании этой команды для написания bat-файлов нужно учитывать, что имена в программах формата DOS имеют ограничение по длине названия. Для того чтобы произвести переключение команды FOR на работу с длинными именами файлов, нужно не забыть перед ней запустить команду LFNFOR ON для включения режима работы с длинными именами и LFNFOR OFF для его отключения и возврата к стандартной длине файлов.

Многие функции с программами, такие как сравнение файлов с определенными типами расширений, находящихся в одной директории, с файлами тех же типов из другой директории, копирование всех файлов текущего каталога в другой, последовательное исполнение файлов с расширениями определенного типа и названиями, начинающимися с цифр, можно осуществить с помощью всего лишь одной вписанной в bat-файл команды. Запуск программы можно комбинировать с запросами пользователя, что способствует повышению удобства работы с данными.

Переходы в bat-файлах

Команда перехода имеет написание GOTO с названием метки через пробел. Если параметра нет или название метки в командном файле не обнаружено, то работа скрипта на этой команде прекращается. Пример:

GOTO zzz

:zzz

REM (запускаются требуемые команды).

В этом примере последовательное исполнение командного файла, дойдя до GOTO zzz, переходит на метку :zzz и продолжается с REM, игнорируя все, что находится между командой перехода и указанной меткой.

Использование условий при работе с bat-файлами

Bat-файл может исполнять или не исполнять команды в зависимости от различных условий, если в нем применяется проверка наступления события IF. Формат этой команды выглядит как «IF условие команда».

Условие представляет собой различные варианты выражений:

— ERRORLEVEL число — в том случае, когда предыдущая выполняемая программа закончилась с кодом завершения, равным указанному числовому значению или больше него, условие будет истинным.

— СТРОКА 1 == СТРОКА 2 — в случае полного совпадения строк условие становится истинным. Вместо строк можно подставить символы %0 — %9, тогда будут сравниваться параметры командного файла.

— EXIST — имя файла — если указанный файл существует, то условие истинное.

— NOT — условие — если указанное условие ложное, то на выходе команды получим истинное значение.

Применяемые команды в bat-файлах

Если нажать кнопку «Пуск» и запустить командную строку (cmd), то можно посмотреть все вставляемые в bat-файл команды. CMD-режим можно использовать как средство для отладки, как помощника, программу для получения сведений о командах. Для этого просто можно набрать HELP. При этом выдается список команд с краткими описаниями к ним. Для получения более детальной информации можно ввести HELP с названием нужной команды.

Использование bat-файлов при резервном копировании данных

Командные файлы сильно упрощают жизнь системным администраторам при осуществлении повседневной работы. Наиболее распространенной сферой их применения являются резервное копирование, создание, удаление, переименование и многое другое. Все это основано на использовании команды bat-файла COPY. К примеру, можно создать программу, которая делает архивные копии документов из выбранной папки с пользовательскими данными определенных форматов, исключив, допустим, медиафайлы большого объема, обеспечив резервирование в папке с именем пользователя и текущей датой, и назвать ее «Команда_копирования_файлов.bat». После этого необходимо обеспечить ее запуск в определенное время с помощью встроенного планировщика или силами самой программы и тем самым обеспечить сохранность данных пользователя.

Автозагрузка батника от имени администратора

В редактор реестра, запущенный из батника от имени Администратора, не передаётся путь к reg-файлуМоя программа, запущенная от Администратора, по щелчку исполняет батник – вот его код: @cd/d.

Автозагрузка с автоматическим перезапуском батника при закрытииХочу подколоть друга, создать бат файл и засунуть его в автозагрузку. Например чтобы при включении.

Запуск с правами администратора одного батника из другогов общем есть такая штука: @ECHO OFF mode con lines=1024 title TestTitle echo Start 1 start.

Создание батника, открывающего командную строку с правами администратораХочу создать батник который открывает командную строку с правами администратора, сделал так: .

Решение

Рад, что сумел помочь.

bioz00, отметь как лучший ответ

Галочка будет доступна, если создать ярлык на батник.

Хе-хе. Автоматически это только с помощью варианта, как указал Matias. Там рабочую папку также можно указать (в том же окне свойств, где и объект запуска).

Добавлено через 4 минутыНе, ну есть и второй вариант – написать свою службу. или одолжить у друга -) Видал недавно такой гейт с иходниками на гитхабе. Сидит в трее и можно настроить на запуск без UAC указанной проги. Не помню правда, как называется (на стаковерфлоу обсуждение было).

Если речь идёт о теме “Запуск скрипта с повышенными привилегиями [руководство]”, то ни один из 3-ёх вариантов у меня не сработал.

Вариант с планировщиком мне не подходит. Есть несколько bat-скриптов для выполнения рутиной работы, например: переключения сетевых адаптеров. Запуск происходит через приложение “выполнить” [win] + [R], путём ввода адреса к скрипту (или псевдонима приложения).

По поводу учётной записи могу ошибиться, но в UAC указана учётная запись администратора. Если запустить cmd.exe от имени администратора и ввести путь к скрипту, то всё работает.

этот вариант также указан в теме “Запуск скрипта с повышенными привилегиями [руководство]”, – как я уже говорил, – вариант не работает.

ситуация такая.. если я скажем хочу запустить какое-нибудь ПО, скажем cmd.exe, то метод с ярлыком срабатывает! А вот если я кликаю по bat-нику и в списке выбираю “Запуск от имени администратора” то запускается окно со скриптом и сразу же закрывается. Тоже самое и если сделать ярлык с опцией “запускать от имени администратора”.

Заранее скажу:что сами скрипты рабочие. Без привелегий админа отрабатывает полностью, а на командах где требуются права админа, просто выдают соответствующее сообщение.

Источник

Запуск Bat при входе в систему определенного пользователя

Нужно, чтобы bat-файл запускался каждый раз не при старте системы, а при входе в систему определенного пользователя.

Bat-файл лежит (c:Program Files (x86)Anvil Studio 2012StartAll.bat)

Что и куда нужно прописать??

Заранее благодарю всех!

Создание задания (планировщик) при входе в систему через schtasks от пользователяКак через schtasks создать задание на запуск, например calc.exe, при входе в систему с правами.

Запуск программы от имени определённого пользователяДоброго времени суток, Буду краток, машина в домене – параметры заданы не мной, отработка команды.

Не отображать плитку пользователей при входе в системуWindows 7. Несколько локальных юзеров. Как сделать, чтобы при входе в систему отображалась не.

Запуск bat-файла для копирования определённого файла по сети из Планировщика заданийДобрый день, Имеется в наличии скрипт на копирование файла по сети. net use Y.

Вот посмотри по порядку шесть скринов

7. Жму Win+L (выхожу из системы), дальше набираю пароль (вхожу в систему) – и ничего не происходит. А должен сработать батник.

Да ни хрена. Создавал задачу вручную.

Добавлено через 12 минутКороче, работает только при перезагрузке и старте системы. А в идеале хотелось бы чтобы при каждом входе в систему. Что не так?

Решение

попробую. Отпишу позже!

Добавлено через 1 час 19 минутЗнаете что помогло?

Пункт: “При разблокировании рабочей станции”

Вопрос решен! Спасибо огромное!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Источник

Как создать пакетный файл BAT для выполнения в командной строке CMD

Batch (.bat) файл — это инструмент, который сэкономит вам не один десяток часов рабочего времени. Узнайте сейчас как использовать пакетный файл на практике.

Пакетный (BAT, batch) файл представляет собой инструмент, с которым сталкивался практически каждый пользователь Windows. Документ помогает выполнить ряд действий буквально парой кликов, а их список ограничивается лишь силой воображения и кодовым функционалом. Давайте разберем инструмент подробнее.

Что такое BAT файл?

Вы, должно быть, уже в курсе о существовании такой утилиты как “Командная строка” Windows, или CMD. Она работает путем ввода команд в качестве входных данных и обрабатывает их, проводя нужные операции с компьютером. Тем не менее, несмотря на всю полезность инструмента, командная строка устраивает далеко не всех. Сложность утилиты и высокий порог вхождения делают ее “последним средством спасения Windows”.

Чтобы упростить процесс работы и сделать его более быстрым, Microsoft ввели посредника между “человеком” и “машиной”. Этим посредником стал пакетный файл (batch file). Запущенный на компьютере документ автоматически выполняет команды в CMD, ограждая пользователя от собственноручной работы. Процесс автоматизации назван пакетным сценарием (batch script).

Доступные форматы BAT файла:

Вне зависимости от того какой формат выбран при создании документа, функции от этого не изменятся.

В чем польза BAT файла?

Автоматизация. Если раньше вам приходилось долго и нудно “вбивать” сложные коды в окно командной строки, пришло время расслабиться! BAT файл экономит время пользователя не только при работе с CMD, но и при взаимодействии с другими системами ПК. Например, вы можете запланировать выключение компьютера через определенный промежуток времени. Этот способ применения пакетного файла хорошо подойдет геймерам, ставящим установку игру на ночь. Запланируйте отключение системы к моменту завершения установки и не опасайтесь за перерасход электроэнергии.

Если же вы разработчик программного обеспечения, обратите внимание на возможность автоматизации при установке вашего приложения. Таким образом повысится не только удобство для конечного пользователя, но популярность вашего софта.

При создании BAT файла используется петля (for), условный оператор (if) и оператор управления (goto). Документ запускается либо с помощью командной строки, либо с помощью другого пакетного файла при использовании команды CALL.

Режимы BAT файла

Несмотря на то, что пакетный файл по умолчанию выполняет работу автоматически, вы можете настроить его так, что при выполнении конкретной операции он будет запрашивать подтверждение. Например, при вводе команды на отключение службы Windows, BAT файл спросит вас, уверены ли вы в своем решении. Этот режим называется интерактивным (interactive).

Другой режим называется пакетным (batch mode). Он работает в классическом стиле и самостоятельно выполняет запрограммированные функции.

Режимы пакетного файла:

  • Интерактивный.Полуавтоматический режим. Программа может запрашивать подтверждение операций.
  • Пакетный.Полная автоматизация работы.

Используйте разные режимы в зависимости от ситуации.

Как запустить BAT файл в Windows 10?

Основной способ запуска пакетного файла — двойной щелчок по его иконке. Тем не менее, вы можете его и открыть и другим методом — с помощью командной строки.

Чтобы открыть BAT файл с помощью командной строки, выполните следующее:

  • Откройте директорию в которой лежит пакетный файл.
  • Определите название файла.
  • Откройте командную строку.
  • Введите название документа с его расширением.Например: HelloWorld.bat

Способ запуска через командную строку приобретает ценность с ростом количества пакетных файлов. Если вы помните название и расширение нужного документа, вы откроете его даже когда забыли точную директорию.

Как создать BAT файл?

Эта тема разбита на 2 раздела, каждый из которых — ключевой при создании пакетного документа. Не зная основ и команд, нужных для формирования структуры, автоматизировать процесс работы невозможно.

Основы создания BAT файлов

Вы не сможете создать пакетный файл без изучения базовых команд. Каким бы он не был полезным и не помогал автоматизировать работу на ПК, непонимание основ станет серьезным препятствием. В этом разделе мы рассмотрим 5 базовых команд, которые вас в курс дела.

  • titleИспользуется для создания заголовка. Отображается в верхней части окна командной строки.
  • echoРежим вывода команд на экран. При включении, командная строка выведет на экран сообщение о совершенном действии. При отключении, соответственно, сообщения пропадут. Обратите внимание, что вам придется контролировать статус echo . Если команда активирована на строке 2 и вы решили отключить ее на строке 22, 20 промежуточных строк будут содержать включенный режим вывода команд.
  • pauseИспользуется для остановки процесса.
  • exitПозволяет закрыть командную строку.
  • clsИспользуется для очистки окна командной строки.
  • ::Позволяет добавить комментарий к действию пакетного файла. Команда является пассивной и не влияет на общую работу документа.

Представленные выше команды — базовые и присутствуют во всех версиях Windows. Дополнительные команды появляются при установке соответствующего программного обеспечения. Например, если вы хотите автоматизировать задачи браузера Google Chrome, введите соответствующий код под названием chrome .

Используя эту информацию как фундамент для создания BAT файлов, вы можете автоматизировать любой процесс на ПК.

Руководство по созданию BAT файла

В этом разделе мы рассмотрим алгоритм создания пакетного файла, который подойдет для Windows 10, Windows 8.1, Windows 7 и даже для Windows XP.

1. Откройте Блокнот . При желании, воспользуйтесь альтернативой стандартному приложению — Notepad++ .

2. С помощью команду echo off временно отключите комментарии, чтобы не засорять окно.

3. Введите заголовок title My First Bat File .

4. Добавьте комментарий This comment will not appear in the command prompt.Следует отметить, что по умолчанию в командной строке отображается только английский язык. Тем не менее, комментарий может быть на любом другом. Он не будет отображаться в CMD и останется только в блокноте. Комментарий — ваша личная заметка, чтобы не потеряться в коде.

5. Введите команду echo Test file executed .

6. Далее введите I am too lazy to write commands by myself .

7. И, наконец, команда paust , чтобы обозначить завершение процесса.

8. Сохраните документ, изменив формат с .txt на .bat .

Источник

Используемые источники:

  • https://www.white-windows.ru/bat-2-exe-i-bat-to-exe-ili-kak-sozdat-iz-bat-skripta-ispolnyaemyj-exe-fajl/
  • https://fb.ru/article/239600/komandyi-bat-faylov-windows
  • https://a174.ru/zapusk-bat-pri-starte-windows/

Пакетные командные файлы. Создание BAT файлов. Команды if, for, goto

Всем привет. В этой статье, мы поговорим на такие темы как : Пакетные командные файлы, создание BAT файлов, Команды if, for, goto.

Пакетные командные файлы.

Пакетно командный файл (batch — файл, пакет) — является особой категорией исполняемых файлов, такие файлы имеют расширение *.bat. В отличие от *.exe и *.com — пакетные командные файлы содержат не машинные коды, а текст который интерпретируется командным процессором.

Пакетно командный файл может содержать:

  1. Внутренние команды (команды работы с файлами и каталогами и системного назначения).
  2. Внешние команды.
  3. Специальные команды, выполняемые только когда прописаны в самом пакетном файле.
  4. Команды ветвления (if).
  5. Метки перехода (goto).
  6. Обращения к исполняемым файлам и вызов других пакетных файлов.

Каждой внешней команде должен соответствовать физический файл на диске…

Создание BAT файлов:

  • С помощью команды copycon имя_файла.bat.
  • Используя команды редиректа (>, >>).
  • С помощью редакторов (блокнот).
  • Используя команду edit имя_файла.bat.

Вызов пакетного файла:

  1. Двойным кликом мыши.
  2. С помощью командной строки, находясь в каталоге где расположеный файл, набрав имя_файла.bat.

Теперь разберем создание BAT файлов на примере. Создадим командный файл, который выполняет отчистку экрана, сообщает текущую версию операционной системы, переходит на диск С и выводит содержимое текущего каталога с паузами при заполнении экрана. Открываем блокнот и начинаем писать наш файл. Команда отчистки экрана это естественно CLS, далее выводим версию ОС с помощью комманды VER, переходим на диск С:, и выводим его содержимое с паузами использовав команду dir и ключ /p.

В общем код получиться вот такой:

cls
ver
c:
dir/p

Команды if, for, goto.

Данные команды являются основными при создании командного файла, и знать их крайне необходимо, далее разберем каждую из них по отдельности и напишем bat файлы с их использованием.

if — Позволяет проверить условие и выполняет ветвление в зависимости от результата проверки.
for — Обеспечивает циклическое выполнение команд.
goto — Позваляет передавать управление на метку и тем самым осуществляет повторное выполнение участков командного файла или наоборот, обходит некоторые участки.

Теперь давайте расмотрим пример написания bat файла с использованием некоторых из основных команд. Наша задача будет заключаться в том, чтоб создать bat файл, который проверяет наличие файла AIDSTEST.EXE в каталоге TOOLS диска С, если файл найден\ненайден должно выводиться сообщение о результате поиска.

В общем код получиться вот такой:

C:
CD TOOLS —/переход в каталог TOOLS/—
IF EXIST AIDSTEST.EXE GOTO MI —/проверка файла AIDSTEST.EXE/—
ECHO ФАЙЛ AIDSTEST.EXE не найден. —/вывод на экран сообщения/—
GOTO END —/переход на метку END/—
:MI —/метка/—
ECHO ФАЙЛ AIDSTEST.EXE найден. —/вывод на экран сообщения/—
:END —/метка/—

На этом данную статью я заканчиваю, надеюсь, вы полностью разобрались с темами: Пакетные командные файлы, создание BAT файлов, Команды if, for, goto.

windows — Команда для запуска .bat файла

Я пытаюсь заставить мой сценарий сборки Visual Studio выполнять файл .bat, который делает что-то важное.

Вот что я хочу сделать прямо сейчас:

cd "F:\- Big Packets -\kitterengine\Common\" Template.bat

Но это не работает.

Я должен сделать это, чтобы он заработал:

cd "F:\- Big Packets -\kitterengine\Common\"
F:
Template.bat

Но это довольно сложно добавить в сценарий Visual Studio.

Как я могу сделать это одной строкой?

35

BingBang32 8 Дек 2016 в 04:17

3 ответа

Лучший ответ

Есть много возможностей решить эту задачу.

1. ЗАПУСТИТЕ командный файл с полным путем

Самое простое решение — запустить командный файл с полным путем.

"F:\- Big Packets -\kitterengine\Common\Template.bat"

По достижении конца пакетного файла Template.bat возврат к предыдущему сценарию невозможен, если указанная выше командная строка находится внутри файла * .bat или * .cmd.

Текущий каталог для пакетного файла Template.bat — это текущий каталог текущего процесса. Если Template.bat требует, чтобы каталог этого командного файла был текущим каталогом, командный файл Template.bat должен содержать после @echo off в качестве второй строки следующую командную строку:

cd /D "%~dp0"

Запустите в окне командной строки cd /? для отображения справки по этой команде, объясняющей параметр /D … перейти в указанный каталог также на другом диске.

Запустите в окне командной строки call /? для отображения справки по этой команде, которая также используется в решениях 2., 4. и 5., а также объясните %~dp0 … диск и путь аргумента 0, который является имя командного файла.

2. ВЫЗВАТЬ командный файл с полным путем

Другое решение — вызвать командный файл с полным путем.

call "F:\- Big Packets -\kitterengine\Common\Template.bat"

Отличие от первого решения состоит в том, что после достижения конца пакетного файла Template.bat пакетная обработка продолжается в пакетном сценарии, содержащем эту командную строку.

О текущем каталоге читайте выше.

3. Измените каталог и запустите командный файл с помощью одной командной строки.

Есть 3 оператора для запуска нескольких команд в одной командной строке: &, && и ||.
Подробнее см. Ответ на Одна строка с несколькими командами с использованием пакетного файла Windows

Я предлагаю для этой задачи оператор &&.

cd /D "F:\- Big Packets -\kitterengine\Common" && Template.bat

Как и в первом решении, нет возврата к текущему сценарию, если это файл * .bat или * .cmd и изменение каталога и продолжение пакетной обработки на Template.bat были успешными.

4. Измените каталог и командный файл CALL с помощью одной командной строки.

Эта командная строка изменяет каталог и в случае успеха вызывает командный файл.

cd /D "F:\- Big Packets -\kitterengine\Common" && call Template.bat

Отличие от третьего решения — это возврат к текущему пакетному сценарию при выходе из обработки Template.bat.

5. Измените каталог и командный файл CALL, сохранив текущую среду с помощью одной командной строки.

Приведенные выше четыре решения изменяют текущий каталог, и неизвестно, что делает Template.bat в отношении

  1. Текущий каталог
  2. переменные среды
  3. состояние расширений команд
  4. состояние отложенного расширения

В случае, если важно сохранить среду текущего сценария * .bat или * .cmd без каких-либо изменений Template.bat в среде для него самого, рекомендуется использовать setlocal и endlocal .

Запустите в окне командной строки setlocal /? и endlocal /? для отображения справки по этим двум командам. И прочтите ответ на команду смены каталога cd .. не работает в пакетном файле после установки npm, более подробно объясняя, что делают эти две команды .

setlocal & cd /D "F:\- Big Packets -\kitterengine\Common" & call Template.bat & endlocal

Теперь используется только & вместо &&, поскольку здесь важно, чтобы после выполнения setlocal команда endlocal, наконец, также выполнялась.


ЕЩЕ ОДИН ПРИМЕЧАНИЕ

Если пакетный файл Template.bat содержит команду exit без параметра /B и эта команда действительно выполняется, процесс команды всегда завершается независимо от иерархии вызовов. Поэтому убедитесь, что Template.bat содержит exit /B или goto :EOF вместо только exit, если exit вообще используется в этом пакетном файле.

5

Community 23 Май 2017 в 10:30

"F:\- Big Packets -\kitterengine\Common\Template.bat" может иметь предисловие call (см. call /?). Или Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat.


Памятка по CMD

  • Cmd.exe

  • Получать помощь

  • Пунктуация

  • Именование файлов

  • Запуск программ

  • Ключи

CMD.exe

Первое, что нужно запомнить, это способ работы с компьютером. Так мы поступали до того, как WIMP (Windows, значки, мышь, всплывающие меню) стали обычным явлением. Он обязан своим корнями CPM, VMS и Unix. Он использовался для запуска программ, копирования и удаления файлов. Также вы можете изменить время и дату.

Для справки по запуску CMD введите cmd /?. Вы должны запустить его с помощью переключателя /k или /c, если только вы не хотите просто ввести его.

Получение помощи

Для общей помощи. Введите Help в командной строке. Для каждой перечисленной команды введите help <command> (например, help dir) или <command> /? (например, dir /?).

У некоторых команд есть подкоманды. Например schtasks /create /?.

Справка команды NET необычна. Ввод net use /? — это краткая справка. Для получения полной справки введите net help use. То же самое относится и к корню — net /? также является краткой справкой, используйте net help. escapes any of the above, including itself, if needed to be passed to a program » parameters with spaces must be enclosed in quotes + used with copy to concatenate files. E.G. copy file1+file2 newfile , used with copy to indicate missing parameters. This updates the files modified date. E.G. copy /b file1,, %variablename% a inbuilt or user set environmental variable !variablename! a user set environmental variable expanded at execution time, turned with SelLocal EnableDelayedExpansion command %<number> (%1) the nth command line parameter passed to a batch file. %0 is the batchfile’s name. %* (%*) the entire command line. %CMDCMDLINE% — expands to the original command line that invoked the Command Processor (from set /?). %<a letter> or %%<a letter> (%A or %%A) the variable in a for loop. Single % sign at command prompt and double % sign in a batch file. \\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming. : (win.ini:streamname) accesses an alternative steam. Also separates drive from rest of path. . (win.ini) the LAST dot in a file path separates the name from extension . (dir .\*.txt) the current directory .. (cd ..) the parent directory \\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off.

Именование файлов

< > : " / \ | Reserved characters. May not be used in filenames.



Reserved names. These refer to devices eg, 

copy filename con 

which copies a file to the console window.

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, 

COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, 

LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9

CONIN$, CONOUT$, CONERR$

--------------------------------

Maximum path length              260 characters
Maximum path length (\\?\)      32,767 characters (approx - some rare characters use 2 characters of storage)
Maximum filename length        255 characters

Запуск программы

См. start /? и call /? для получения справки обо всех трех способах.

Есть два типа программ Windows — консольные и неконсольные (они называются графическими интерфейсами, даже если у них его нет). Консольные программы присоединяются к текущей консоли, или Windows создает новую консоль. Программы с графическим интерфейсом пользователя должны явно создавать свои собственные окна.

Если полный путь не указан, Windows просматривает

  1. Каталог, из которого загружено приложение.

  2. Текущий каталог родительского процесса.

  3. Windows NT / 2000 / XP: 32-разрядный системный каталог Windows. Использовать GetSystemDirectory, чтобы получить путь к этому каталогу. В имя этого каталога — System32.

  4. Windows NT / 2000 / XP: 16-разрядный системный каталог Windows. Здесь нет функция, которая получает путь к этому каталогу, но это искал. Имя этого каталога — System.

  5. Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.

  6. Каталоги, перечисленные в переменной среды PATH.

Укажите название программы

Это стандартный способ запуска программы.

c:\windows\notepad.exe

В пакетном файле пакет будет ждать завершения программы. При вводе командная строка не ждет завершения графических программ.

Если программа представляет собой пакетный файл, управление передается, а остальная часть вызывающего пакетного файла не выполняется.

Используйте команду «Пуск»

Start запускает программы нестандартными способами.

start "" c:\windows\notepad.exe

Start запускает программу и не ждет. Консольные программы запускаются в новом окне. Использование переключателя /b принудительно помещает консольные программы в одно и то же окно, что сводит на нет основную цель запуска.

Пуск использует графическую оболочку Windows — так же, как при вводе WinKey + R (диалоговое окно «Выполнить»). Пытаться

start shell:cache

Также имена программ, зарегистрированные в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths, также можно вводить без указания полного пути.

Также обратите внимание, что первый набор кавычек, если они есть, ДОЛЖЕН быть заголовком окна.

Использовать команду вызова

Вызов используется для запуска командных файлов и ожидания их выхода и продолжения текущего командного файла.

Другие имена файлов

Ввод имени файла, отличного от программы, аналогичен двойному щелчку по файлу.


Клавиши

Ctrl + C закрывает программу без выхода из окна консоли.

Для других ключей редактирования введите Doskey /?.

  • и команды отзыва

  • ESC очищает командную строку

  • F7 отображает историю команд

  • ALT + F7 очищает историю команд

  • F8 ищет историю команд

  • F9 выбирает команду по номеру

  • ALT + F10 очищает определения макросов

Также нет в списке

  • Ctrl + или Перемещает слово за раз

  • Ctrl + Backspace Удаляет предыдущее слово

  • Главная Начало строки

  • Конец Конец строки

  • Ctrl + End Удаляет до конца строки

29

temporary_user_name 2 Дек 2018 в 17:58

Пакетные (BAT) файлы — что такое, чем открыть и как писать узнаешь тут!

Если рассматривать исполняемые приложения, то среди них особую роль будут играть пакетные файлы с расширением BAT. Возможности ОС позволяют выполнить запись некоторой последовательности команд непосредственно в документ данного типа. Таким образом, получается файл, содержащий наборы команд. Это позволяет упростить функционирование ОС. Предусматривается наличие некоторого списка команд, которые могут быть запущены исключительно из пакетного документа.

Название BAT файлы было получено за счет наличия указанного расширения. Запуск пакетных документов является аналогичным приложениям .EXE и .COM. Следует отметить главное отличие от классических программ. BAT документы не содержат внутри код. Предусматривается наличие исключительно текстовой информации. Именно её считывает и выполняет командный процессор DOS. Существует несколько доступных вариантов:

  • Особые команды для вывода определенных сведений или приложений на экран.
  • Осуществление вызова различных пакетных документов.
  • Работа с другими приложениями.
  • Особые команды, обеспечивающие создание ветвлений, а также циклов.

Обеспечивается способность выполнения довольно сложных и многоуровневых последовательностей управления процессами. Наиболее значимым качеством пакетных документов требуется отметить автоматизацию работы над заданиями. Деятельность происходит без каких-либо вмешательств со стороны пользователей системы. Разрешается выполнение файлов BAT почти на всех этапах установки ОС Windows.

Допускается помещение внутрь пакетных документов всех существующих команд. Предполагается усложнение поставленных задач и даже создание условий. В этом деле оказывают поддержку команды goto, if и for. Требуется отметить autoexec.bat – файл необходим при осуществлении начальных настроек ОС в ходе запуска.

Следует рассмотреть простейший пример самостоятельного создания пакетного файла. Для выполнения поставленной задачи будет достаточно открыть новый документ с расширением TXT и ввести туда предложенный текст:

title Batch File Testing

echo Hello World

echo.

echo Starting Notepad

start notepad

echo.

echo Starting Wordpad

start Wordpad

echo.

pause

exit

После этого осуществляется сохранение документа и установка для него любого названия. Основным моментом требуется предусмотреть задание расширения CMD или BAT. После этого требуется выполнить запуск. Происходит назначение окна с названием «Batch File Testing». Работа указанного документа будет заключаться в том, чтобы открыть блокнот и выполнить запрос на нажатие любой клавиши. Когда это сделано, окно закроется.

Пакетные файлы применяются постоянно и сильно упрощают жизнь при осуществлении повседневных задач для программистов. Наиболее распространенными сферами использования BAT документов можно отметить резервное копирование данных, переименование, удаление файлов или документов, а также многое другое. Большинство действий в системе разрешается проводить только в том случае, если имеются администраторские права. Подобный фактор требуется принимать во внимание.

Задание паузы в файле BAT перед исполнением последующей команды

Разрешается осуществление паузы в результате применения большого числа команд. Часть из них предусматривают подобную функцию. Ниже будет рассмотрено выполнение поставленной задачи за счет команды ping:

ping -n 1 -w 50000 123.123.123.254 >nul

Следует перечислить и расшифровать параметры:

n 1

Запрос будет исполняться только один раз

w 50000

Для ожидания ответа выбран интервал в 50.000 мс (50 секунд)

123.123.123.254

В качестве этого параметра прописывается IP адрес, которого точно не существует внутри локальной сети. Это позволяет утверждать о невозможности ответа на запрос

>nul

Производится перенаправление для выдачи в несуществующее место

Зацикливание в файле BAT выполнения команды

Довольно распространенной задачей требуется отметить периодический вызов некоторой команды через равные промежутки времени. Подобные мероприятия особенно часто нужны в случае обновления некоторых программ или системы. Оптимальным решением поставленной задачи является создание зацикленного в файла BAT с некоторой паузой. Ниже рассмотрен пример реализации такого способа:

:loop

ping -n 1 -w 60000 123.123.123.254 >nul

start notepad.exe

goto loop

Происходит открытие блокнота каждую минуту.

Создание папки, имя которой устанавливается текущей датой

Папки данного вида популярны в качестве мест сохранения бэкапов. Необходимо рассмотреть основные методы создания.

MD %SYSTEMDRIVE%\%date:~-10%

Применение команды позволит создать новую папку и присвоить её название, соответствующее текущей дате. Недостатком указанного подхода считается невозможность получения результата в определённых ситуациях. Сюда можно отнести неподходящие установки отображения даты на компьютере или специфические региональные настройки. Чтобы подобные факторы не оказали своего влияния, применяется следующий вид:

md %systemdrive%\%date:~0,2%_%date:~3,2%_%date:~6,4%

или

md %systemdrive%\%date:~6,4%_%date:~3,2%_%date:~0,2%

Стоит предложить вариант по дальнейшему улучшению результата. Например, осуществление прибавления к названию документов текущей даты:

@echo off

for /F «tokens=1-4 usebackq delims=. » %%1 in (`date /t`) do set mydate=%%4.%%3.%%2

ren test.txt test%mydate%.txt

Это позволит изменить название документа с test.txt на test(гггг.мм.дд).txt

Запрет повторного запуска программ

Когда запуск определенной программы происходит с применением файла BAT, имеется возможность не допускать повторного исполнения такой процедуры.

pslist.exe -e «операция«

if %errorlevel%==1 start «» «приложение«

Здесь упоминается специальная программа pslist. Она является бесплатной и может быть свободно загружена из интернета.

Выполнение резервных копий в автоматическом режиме

Ниже будет представлен скрипт, который отвечает за создание архивных копий документов с данными пользователей, а также некоторыми другими документами. Не предусматривается проведение подобных мероприятий с медиа файлами. Причиной является их значительный объем. Дополнительно, их потеря редко считается критичной.

rem *******************

rem задаём жесткий диск, где лежат папки для архивирования и винт куда будем бэкапить

rem *******************

SET DRIVE1ST=d:

SET DRIVE2ND=e:

 

rem *******************

rem пароль на архив

rem *******************

SET PASSWD=qmsdhgsdfgsdfhdsfhsdhf

 

rem *******************

rem если копировать для надёжности куда-нибудь на сетку

rem *******************

rem SET COPYTO=\\shpakk\c$\!backup

 

rem ********************

rem *** Проверим путь назначения архива

rem ********************

%DRIVE1ST%

if not exist \!backup md \!backup

if not exist \!backup\Departments md \!backup\Departments

if not exist \!backup\Exchange md \!backup\Exchange

if not exist \!backup\MEDEA_rdisk md \!backup\MEDEA_rdisk

cd \!backup

 

rem ******************************

rem *** Backup \\SERVER\e$\Exchange

rem ******************************

SET DIRNAME=Exchange

SET FILENAME=SERVER_Exchange

SET SOURCEDIR=e:\Exchange

rar a -r -m5 -dh -x*.mp3 -x*.fcd -x*.avi -x*.zip -x*.rar -x*.exe -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%\*.*

if not exist %DIRNAME%\%FILENAME%_new.rar goto next2

del %DIRNAME%\%FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%.rar %FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%.rar

copy %DIRNAME%\%FILENAME%.rar %COPYTO%\%DIRNAME%

 

:next2

rem ***************************

rem *** Backup \\SERVER\e$\Users

rem ***************************

SET DIRNAME=Departments

SET FILENAME=SERVER_Departments

SET SOURCEDIR=e:\Departments

if not exist %DIRNAME%\%FILENAME%_new.rar goto next3

del %DIRNAME%\%FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_4.rar %FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_3.rar %FILENAME%_4.rar

ren %DIRNAME%\%FILENAME%_2.rar %FILENAME%_3.rar

ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%_2.rar

:next3

rem *******************

rem это если архив будет большим — кусками бить -v357888k

rem *******************

rem rar a -r -m5 -v357888k -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%

rem *******************

rem архивирование пошло, не берём мультимедиа файлы

rem *******************

rar a -r -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -x*.jpg -x*.tif -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%

goto next4

 

:next4

rem **********************************

rem *** Create repair disk on \\SERVER

rem **********************************

SET DIRNAME=MEDEA_rdisk

SET FILENAME=MEDEA_rdisk

SET SOURCEDIR=%windir%\repair

%windir%\system32\rdisk.exe /s-

rar a -r -m5 -dh -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%\*.*

if not exist %DIRNAME%\%FILENAME%_new.rar goto next5

del %DIRNAME%\%FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%.rar %FILENAME%_old.rar

ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%.rar

copy %DIRNAME%\%FILENAME%.rar %COPYTO%\%DIRNAME%

 

:next5

В итоге имеем 3 папки: Departments, в ней:

SERVER_Departments_2.rar — 2х дневной давности

SERVER_Departments_3.rar — 3х дневной давности

SERVER_Departments_4.rar — 4х дневной давности

SERVER_Departments_new.rar — НОВЫЙ

SERVER_Departments_old.rar — СТАРЫЙ Exchange

Так как архивируем обменник — он нам сильно то и не нужен храним только сегодняшний и вчерашний архивы

SERVER_Exchange.rar

SERVER_Exchange_old.rar ну и систему на всякий в папке

SERVER_rdisk

SERVER_rdisk.rar

SERVER_rdisk_old.rar

Использование комментариев в файлах BAT

Чтобы разбираться в том, что именно осуществляет заданный BAT документ, рекомендуется применять комментарии. Использование их для главных блоков особенно важно в случае значительного объема текстовой информации. Просматривая файл через некоторое время, у Вас не возникнет проблем с пониманием особенностей его работы.

Написание комментариев можно осуществить несколькими способами. Когда приходится иметь дело с довольно большим количеством текста, рекомендуется следующий подход:

goto start

—————————————

Этот пакетный файл предназначен

для автоматизации рутинных операций,

выполняемых ночью для синхронизации

содержимого корпоративного ftp-сервера

с ftp-серверами филиалов

—————————————

Пакетный файл написан 01/01/2016

Последнее исправление внесено 10/02/2016

—————————————

И т.д.

:start

Подобный вариант обеспечивает запуск пакетного документа, после чего выполняется переход контроля непосредственно команде, которая помещается после start. В некоторых ситуациях будет выгодным использовать иной подход. Например, хорошо подходит применение команды rem или два двоеточия. Они оптимально подходят для небольших по своему размеру комментариев с длиной в одну строчку.

rem Комментарий

:: Комментарий

Если Вы хотите обеспечить для себя удобство последующего разбора своих записей, рекомендуется не забывать про возможности комментирования. Не стоит описывать каждый шаг, но основные блоки должны иметь информацию о себе. Комментарии считаются правилом хорошего тона в программировании.

Ожидание появления заданного документа в файле BAT

В некоторых ситуациях возникает потребность осуществить заданные действия при возникновении определенного файла. Осуществление такой задачи в пакетном документе предусматривается следующий подход:

:test

if exist c:\1.txt goto go

ping -n 20 127.0.0.1 >nul

goto test

:go

start notepad.exe

Приведенный текст задает необходимость выполнения проверки каждые 20 секунд того, существует ли в корне диска С документа с названием 1.txt. Если подобное событие произойдет, выполняются действия после goto. В конкретной ситуации производится запуск программы блокнота, но можно использовать любые другие варианты.

Периодически возникает ситуация, когда искомый файл обладает крупным объемом и проводится его копирование. Таким образом, поиск выдаст результат, но какие-либо действия повлекут за собой появление ошибки. Чтобы этого не возникло, нужно несколько улучшить содержимое пакетного файла.

:test

if exist c:\1.txt goto go

ping -n 10 127.0.0.1 >nul

goto test

:go

rename c:\1.txt 1.txt

if not %errorlevel% == 0 goto go

del c:\1.txt

Как и раньше, попытка каких-либо действий с не полностью скопированным документом вызовет ошибку, но она не приведет к завершению. Произойдет повторение цикла и так до тех пор, пока ошибка не исчезнет.

Способы обхода процедуры проверки даты из файла BAT

Некоторые программы в процессе своей работы осуществляют проверку текущей даты. В большинстве случаев это создано для контроля временных рамок использования. Достаточно часто владелец устанавливает возможность бесплатной эксплуатации на протяжении установленного периода времени. Когда сроки истекают, расширенный или даже весь функционал программы перестает работать. Другой вариант – это регулярное обновление до последней версии.

Если Вы не хотите, чтобы программа использовала временную проверку, можно изменить свои настройки даты и времени. Этот вариант нельзя назвать приемлемым по многим причинам. Более эффективным подходом требуется назвать использование пакетного файла со специально прописанной информацией. Предполагается запуск приложения и последующий возврат даты к тому значению, что присутствовало ранее.

set tempdate=%date:~-10%

date 01-01-04

start notepad.exe

date %tempdate%

Что именно делают прописанные строки? Прежде всего, производится сохранение текущей даты в системе. Для этого применяется особая переменная. Во второй строке происходит установка системной даты на новое значение. В данном случае, это 1 января 2004 года. Сразу после этого предполагается проведение вызова программы, отвечающей за проверку системной даты. Мы использовали блокнот, но в Вашем случае требуется предусмотреть подобный момент. Пока Блокнот является открытым, пакетный документ ожидает, а сама дата не предусматривает изменение обратно. После закрытия Блокнота происходит возврат системной даты из переменной.

Важно уделить внимание определенному моменту. Когда в пути до конкретного документа используются символы из кириллицы, рекомендуется применять текстовый редактор с поддержкой кодировки 866 (ОЕМ, русская) или аналогичного варианта. Когда это не предусматривается, происходит выдача ошибки и работа пакетного файла не осуществляется.

Большинство программ упрощают систему проверки – она выполняется исключительно в процессе запуска. Это позволяет модифицировать пакетный документ в соответствии с подобными запросами.

set tempdate=%date:~-10%

date 01-01-04

start notepad.exe

date %tempdate%

Процесс работы довольно прост. В первую очередь выполняется изменение системной даты и последующий запуск программы. Пакетный документ не станет ждать, пока она завершит своё функционирование и осуществит возврат даты на прежнее значение.

Импорт переменных реестра из пакетного файла

Когда возникает потребность выполнения импорта в реестр определенных переменных, осуществление поставленной задачи предполагает использование следующей команды:

regedit.exe -s C:\environment.reg

Производится импорт в реестр сведений из документа environment.reg. Поскольку применяется специальный ключ –s, то не предусматривается вывода сообщений для подтверждения таких действий.

Экспорт переменных реестра из пакетного файла

В некоторых случаях поставлена задача, противоположная рассмотренной в предыдущем абзаце. Чтобы сохранить в пакетном файле некоторую часть реестра с полным перечнем параметров, необходимо использовать следующий подход:

regedit.exe -ea C:\environment.reg «HKEY_CURRENT_USER\Environment»

Происходит сохранение ветки HKEY_CURRENT_USER\Environment в документ, расположенный по адресу C:\environment.reg. При запросе на восстановление значений HKEY_CURRENT_USER\Environment, предполагается необходимым только выполнить запуск environment.reg. Примером использования такой команды следует назвать осуществление регулярного бэкапа настроек ПО или всей системы. Подобная информация находится в реестре и может быть выгружена оттуда. Полный адрес может включать в себя проблемы. Чтобы они не вызвали ошибку, надо позаботиться о заключении подобного пути в кавычки.

Применение внутри пакетного файла символа %

Символ процента относится к категории спецсимволов. Если требуется применить его внутри пакетного документа, то следует прописывать дважды.

echo 50%%

Если ввести указанную команду, то предполагается выдача на экран в BAT документе 50%. Без использования двойного символа %%, результатом станет только число 50.

Смена имен по маске из файла BAT

В некоторых ситуациях поставлена задача сменить названия всех файлов в папке с применением определенного шаблона из пакетного документа. Предполагается использование следующей команды:

for /f «tokens=*» %%a in (‘dir /b PATH\*.*’) do ren PATH\%%a Prefix%%a

Требуется выполнить некоторые замены в зависимости от конкретной ситуации. Вместо PATH\ устанавливается расположение документов, название которых должно быть изменено. Prefix требуется заменить на символы, добавляемые к файлу в процессе смены имени. Важным условием является расположение самого файла BAT. Он не должен находиться в папке, где происходит переименование, иначе название документа будет изменено. Другой особенностью является работа с подпапками. Они не смогут избежать общей процедуры смены имени и к названию также добавится префикс.

Имеется возможность осуществить процедуру исключительно по отношению к некоторым типам файлов. Для этого в прописанной ранее строке надо изменить *.* на другой вариант – после звездочки указывается интересующее расширение (*.txt или иное). Это позволит переименовать только документы определенного вида. Пример с несколько другим подходом написан ниже:

set thePATH=C:\test

for %%I in (*.txt) do ren «%thePATH%\%%~nxI» «%%~nI.dat»

Определение имени компьютера из пакетного файла

Непосредственно из файла BAT можно узнать название компьютера. Для этого необходимо прописать в документе

hostname

Команда предусматривает возврат имени устройства, на котором произошел её запуск.

Изменение IP адреса устройства из пакетного файла

Чтобы изменить IP адрес компьютера, следует применять команду netsh. Начать подобные мероприятия можно только после того, как станет определены текущие настройки. Требуется получить IP адрес на данный момент:

netsh interface ip show address

Происходит выдача текущей конфигурации. Нам необходимо узнать название применяемого интерфейса. В качестве примера это может быть FASTNET. Далее будет предполагаться необходимость изменения IP адреса на 172.22.0.33 (шлюз 172.22.0.1, маска 255.255.255.0). Предусматривается следующая строка в пакетном файле для выполнения поставленной задачи:

netsh interface ip set address name=»FASTNET» static 172.22.0.33 255.255.255.0 172.22.0.1 1

Обработка команды повлечет изменение IP адреса у интерфейса FASTNET на 172.22.0.33. Это и является искомой задачей. Указанная команда предлагает весьма широкие возможности в плане работы с сетевыми настройками.

Автоматизация удаления документов по типу

Задача очистки жесткого диска от временных файлов может быть решена с помощью следующей строки:

del /f /s /q C:\*.tmp

Следует разъяснить используемые параметры

/f

Происходит удаление всех документов, даже при наличии у них атрибута «только чтение»

/s

Выполняется удаление файлов из всех подкаталогов.

/q

Не всплывает окна, просящего подтверждения действиям удаления.

C:

Прописывается диск, для которого будет производиться удаление документов. В данном случае, разрешается указывать более конкретный путь, например, до некоторой папки.

*.tmp

Тип удаляемых документов.

Следует аккуратно использовать параметр /q. С ним удаление будет происходить без каких-либо запросов и это может привести к весьма неприятным последствиям.

Отправка сообщения непосредственно из файла BAT

Следует рассмотреть ситуации, когда осуществляется работа пакетного файла на одном из устройств в сети. В подобной ситуации будет особенно удобным, когда после завершения установленных мероприятий произойдет пересылка соответствующего сообщения для администратора. Это довольно просто сделать с применением следующей строки:

net send name Message text

Здесь параметр name означает название некоторого устройства, куда будет отправлено сообщение. В качестве самого сообщения следует прописать информацию Message text. Важно учитывать применяемый алфавит. Когда осуществляется работа с кириллицей, нужно применять кодировку MS-DOS (866 кодовая страница) или любую аналогичную ей. В ином случае, следует приготовиться к выдаче набора ничего не значащих символов. Таким образом, рекомендуется применять соответствующие типы текстовых редакторов.

В качестве примера подобной программы можно отметить FAR. Следует выполнить открытие пакетного документа через этот текстовый редактор за счет нажатия клавиши F4 или выбора соответствующего пункта. Указывается кодировка DOS – она исключает проблему невозможности распознания символов системой.

Запуск BAT файла из другого BAT документа

Чаще будет проще использовать возможность запуска из одного BAT файла другого, чем прописывание дополнительных строк действий. Для этого могут предусматриваться и более серьёзные рекомендации, чем удобство пользователя. Например, при необходимости приостановить осуществление основного пакетного документа во время выполнения другого или задать их параллельную деятельность.

Следует рассмотреть подобный момент более подробно. Выполним создание пакетного файла 1.bat, который будет включать следующее содержимое:

call 2.bat

То есть, происходит вызов второго пакетного файла 2.bat, где пропишем одну команду:

pause

Посмотрим, что произойдет при запуске 1.bat. Если это сделать, то на экран выдастся сообщение с предложением нажатия любой клавиши. Когда это будет сделано, произойдет закрытие окна. Из этого можно сделать довольно простой вывод. Когда один пакетный файл вызывается из другого с применением call, предусматривается остановка его исполнения до той поры, пока выполнение второго не будет завершено.

Стоит рассказать об иной ситуации, которая предусматривает необходимость параллельного выполнения пакетных документов. Подобный запрос возникает довольно часто и для его реализации можно использовать команду start, как оптимальный вариант в сложившихся условиях. Вернемся к созданным документам и в 1.bat введем некоторые корректировки:

start 2.bat

Теперь предполагается открытие окна с предложением нажать любую кнопку при запуске 1.bat. При этом, окно главного пакетного документа закроется после выполнения своей задачи. Теперь Вы понимаете особенности применения команд start и call. Следует отметить тот факт, что они используются не только для того, чтобы запускать пакетные файлы. Команды вполне способны осуществить начало работы любого приложения или документа.

Отключение выдачи на экран команд в процессе осуществления пакетного файла

Когда в пакетном файле выполняются различные команды, предусматривается выдача результата работы на экран. Далеко не всегда имеется запрос в подобных действиях и требуется осуществить исполнение с отключенным выводом. Для этого следует применять символ @, который прописывается перед самой командой.

Требуется рассмотреть это на примере. Допустим, в пакетном файле имеется строка

echo Testing

На экран предусматривается выдача echo Testing, а потом результат деятельности команды – слово Testing. Можно написать внутри пакетного документа следующие сведения:

@echo Testing

Результатом работы станет только выдача слова Testing. Можно пойти ещё дальше и установить работу таким образом, чтобы отключился вывод команд на протяжении всего файла BAT. В таком случае, требуется задать

@echo off

Автоматический ответ на запросы о подтверждении

При работе некоторых команд может возникнуть ситуация, когда они должны совершить потенциально опасное действие в системе. В качестве примера рекомендуется назвать format или del. Подобный момент предусмотрен и выдается соответствующее предупреждение. Когда производится выполнение внутри пакетного файла, то его деятельность остановится. Она будет возобновлена только после подтверждения и это способно стать причиной потери драгоценного времени.

Существует способ осуществления задачи автоматизации. Предполагается использование перенаправления необходимого ответа в команду. Далее будет на примере рассмотрено подобное действие. Требуется создать на диске С обычную папку Folder и внутрь неё осуществим помещение любых 2х документов.

Запускаем интерпретатор команд и вводим в нем

del C:\Folder

Это предполагает необходимость осуществить удаление вместе со всеми файлами внутри. Поскольку подобное действие относится к числу потенциально опасных, поступит запрос на подтверждение следующего вида:

C:\Folder\*, продолжить [Y(да)/N(нет)]?

Команда не станет продолжаться до тех пор, пока пользователь не ответит. Если работа производится в автономном режиме, ожидание может быть крайне длительным, а сам процесс останется невыполненным. Для выхода из сложившейся ситуации рекомендуется применение специального символа (|). Он предусматривает, что должна произойти передача следующей сразу после команде. Теперь модифицируем строку в пакетном файле:

echo Y|del C:\Folder

На экран происходит выдача подтверждения с уже положительным решением. Таким образом, из указанной папки произойдет удаление всех документов. Следует аккуратно использовать подобную возможность.

Перенаправление результата выполнения команды в документ

В случае деятельности BAT файлов сложного типа способны возникнуть проблемы в плане того, насколько правильно функционирует система. Именно по этой причине применяется специальное средство – запись в специальный лог-файл. Это предусматривает возможность ознакомиться с документом в дальнейшем и провести анализ того, насколько правильно осуществлялось выполнение поставленных задач.

Чтобы выполнить перенаправление результата работы в специально предназначенный для этого документ, требуется создать файл BAT со следующими строками:

@echo off

echo Start %time%

echo Create test.txt

echo test>C:\test.txt

echo Copy Test.txt to Old_test.txt

copy C:\test.txt C:\Old_test.txt

echo Stop %time%

Необходимо подробнее разобрать, что именно выполняет указанный набор команд.

Первой строкой задается отключение вывода команд. Это позволит получить в лог-документе исключительно результаты осуществления.

Второй строкой указывается время, когда начал исполняться пакетный файл.

Третьей строкой указывается на то, что следующей командой будет создаваться текстовый документ test.txt.

Четвертая строка предназначена для того, чтобы непосредственно осуществить поставленную задачу. Следующим этапом производится запись в него одного слова – test.

Пятая строка проводит выдачу в лог-документ пояснение о том, что следующим этапом станет происходить копирование в иное место.

В шестой строке осуществляется непосредственное копирование C:\test.txt в файл C:\Old_test.txt. Можно говорить о том, что происходит создание копии документа, но с присвоением для него нового названия.

В заключительной строке указывается команда, которая предусматривается для указания времени действия пакетного документа. Аналогичные сведения можно получить в лог-файле.

Требуется рассмотреть дальнейшие возможности по модификации предложенного набора команд. Часто возникает запрос на выполнение хранения подобных документов в специально предназначенной для них папке. Каждый день должна производиться запись отчета с присвоением для него нового названия. Оптимальный вариант – это использование имени, состоящего из некоторого слова и автоматически добавляемой к нему текущей даты. Сам файл можно назвать 1.bat и сохранить.

Теперь создадим на диске папку LOG и полный путь к ней станет иметь указанный вид: C:\LOG. Следующим этапом происходит запуск команду установленного типа:

1.bat>C:\LOG\%date~-10%.txt

Когда в расположении документа предусматриваются пробелы, рекомендуется предусмотреть указанный момент и применять кавычки или специальный формат записи. Ниже указано два возможных варианта:

«C:\Program Files\1.bat»>C:\LOG\%date~-10%.txt

C:\Progra~1\1.bat>C:\LOG\%date~-10%.txt

Предполагается, что сразу после начала работы 1.bat в папке C:\LOG произойдет создание документа с названием, которое включает текущую дату. Именно указанный файл и требуется установить в качестве отчета о деятельности пакетного файла 1.bat. Если запустить рассмотренный BAT файл, то предполагается предоставление указанного далее результата:

Start 19:03:27,20

Create test.txt

Copy Test.txt to Old_test.txt

Скопировано файлов: 1.

Stop 19:03:27,21

Чтобы произвести перенаправление результатов работы bat-документа в лог-документа, следует применять специальный символ (>). Написание команды будет иметь представленный ниже вид:

Путь\ИмяФайла.bat>Путь\ИмяЛогФайла.txt

Некоторые вопросы касаются расширения, которое должно даваться лог-файлу. Оно может быть любым, в том числе являться страницей html. Последний вариант особенно удобен в том случае, когда выгрузка значений должна происходить на какой-либо сайт.

Создание папки из BAT файла

Чтобы выполнить поставленную задачу, предполагается несколько доступных вариантов действий. Наиболее простой способ включает в себя применение команды MKDIR или специального сокращенного аналога – MD. Предполагается написание указанной ниже строки в документе:

MD FolderName

Когда такая команда будет осуществлена, предполагается образование новой папки FolderName. Она помещается туда же, где располагается файл BAT. Вовсе не обязательно обеспечивать подобную привязку. Допускается создавать папку в любом указанном пользователем месте, что и внесено в следующую команду:

MD D:\FolderName

Разрешается применять системы переменных в тех случаях, когда выполняется создание папок. Пример заключается в следующем – требуется создать папку в корне жесткого диска D с названием в виде имени текущего юзера. Задается вот так:

MD D:\%USERNAME%

Дальнейшее усложнение команды предписывает создание папки с именем юзера на системном диске устройства:

MD %SYSTEMDRIVE%\%USERNAME%

Ниже рассматривается вариант, когда в качестве названия для папки применяется дата на момент выполнения пакетного файла.

set datetemp=%date:~-10%

MD %SYSTEMDRIVE%\%datetemp%

Нужно выполнить рассмотрение того, каким именно образом происходит функционирование набора команд. Первой строкой создается специальная переменная datetemp. Когда работы завершатся, она удаляется, но до этого момента играет важную роль. Предусматривается корректировка значения переменной на протяжении всего времени её существования. В строке осуществляется присвоение значения, представляющего собой десять символов с правой части от системной переменной DATE. Используется формат представленного типа: Дн ДД.ММ.ГГГГ. Сначала слева идет указание недель и оно не представляет интереса. При создании папок открывается большое количество путей, которыми разрешается следовать. Это открывает большие возможности перед пользователями. Если Вы хотите увидеть перечень всех переменных, следует применить команду SET.

Создание документа с произвольным названием из BAT файла

Чтобы можно было создать документ в ходе осуществления пакетного файла, нужно написать специальный символ, отвечающий за перенаправление: (>). Предполагается перенаправление потока с экрана на документ. Рекомендуется использование указанного способа:

@echo Start file>C:\1.txt

Исполнение команды создает текстовый документ, обладающий строкой Start file. В ходе создания документа станет возможным применение в качестве части или всего его названия значений некоторых переменных. Схожие моменты уже рассматривались ранее. В качестве примера требуется отметить создание файла с названием, соответствующим дате его запуска.

set datetemp=%date:~-10%

@echo .>%SYSTEMDRIVE%\%DATETEMP%.txt

Работа начинается с того, что создается некоторая переменная, которая получает название datetemp. Для неё производится задание десятка символов с правой части системной переменной DATE. Это позволяет обеспечить применение исключительно действующих дат. Во второй строке указывается перенаправление (.) в документ. Его название получается за счет использования значения переменной datetemp. Должно быть указано TXT расширение, поскольку требуется получить текстовый документ.

Когда происходит работа в сети и пользователь с правами администратора реализует сбор сведений, рекомендуется добавлять название главного устройства. Это позволит упростить задачу дальнейших проверок. Требуется использование команды:

@echo .>C:\FolderName\%COMPUTERNAME%.txt

Происходит создание на диске С документа TXT, обладающего названием, состоящим из имени устройства выполнения пакетного файла. Допускается модернизировать предложенные строчки путем внесения различных переменных.

Процесс автоматизации запуска файлов BAT

Ряд процессов требует осуществления задачи запуска документов BAT без привлечения к подобному процессу внимания со стороны пользователя. Автоматическая деятельность системы вполне может быть прописана. Такой подход используется довольно часто. Классический планировщик из инструментов операционной системы вполне способен помочь в выполнении начала работы пакетных файлов по расписанию. Таким образом, происходит запуск в точно установленное юзером время или через некоторые интервалы.

Помимо стандартного планировщика можно найти огромное количество специализированных программ. Значительная часть из них являются свободно доступными. В платных версиях предусматривается использование расширенных возможностей.

Ещё одним вариантом можно назвать автоматический запуск некоторых действий каждый раз при входе пользователем в учетную запись или включении устройства. Ранее уже рассматривались основные направления деятельности и способы задания команд для подобных ситуаций.

Применяемые в документах BAT команды

Как уже упоминалось, допускается использовать все команды, некоторые из них предназначаются специально для работы в пакетных файлах. Можно ознакомиться с полным перечнем. Для этого предполагается получить доступ к командной строке. Это можно сделать через Пуск > Выполнить > CMD.

Предусматривается несколько вариантов получения сведений:

help

Если осуществить ввод указанной команды, можно получить полный список существующих команд и небольшие описания к ним. Разрешается обеспечение более детальных сведений. Чтобы можно было их получить, требуется ввести help и название интересующей команды. В качестве примера рекомендуется указать возможность получения данных по АТ:

help AT

Результатом необходимо назвать выдачу перечня ключей для осуществления запуска указанной команды из пакетного документа. В данном плане Windows предоставляет гораздо более широкие возможности, чем DOS. Одним из примеров расширенного функционала требуется назвать открытие файла логов деятельности пакетного доку

start название_документа.txt

Если осуществить запуск подобной команды, то произойдет открытие название_документа.txt. Важным моментом является тот факт, что пакетный файл окончит свою деятельность. Использование подобного метода является оправданным в тех случаях, когда объемы лог-файла невелики.

Создание BATCH файла

Следует открыть программу «Блокнот» и в ней провести набор указанных далее строк:

@echo This batch file

@pause

После этого требуется выполнить сохранение в качестве файла 1.bat. Следующим этапом таких мероприятий, следует провести открытие пакетного документа. Это повлечет за собой выдачу строк:

This batch file

Нажмите любую клавишу для продолжения…

Когда предложение будет исполнено, произойдет закрытие пакетного документа, поскольку его работа завершается. Отдельное внимание должно уделяться этому символу — @. Он задает выдачу исключительно результата работы, а не непосредственно команды. Вы можете осуществить несколько экспериментов, связанных с изменением положения или удаления данного символа. Это позволит лучше понять особенности его использования. 

bat файл с 10 и более параметрами

Как известно, в bat файле оператор % позволяет получить только девять параметров командного файла:

echo %9

Считать значения десятого и последующих параметров тоже можно.

Сдвиг параметров командой SHIFT

Команда SHIFT

Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла.

Команда SHIFT сдвигает нумерацию параметров, так что под теми же номерами %0-%9 оказываются уже параметры с первого по десятый.

Последующие вызовы SHIFT сдвигают параметры ещё дальше: со второго по одиннадцатый, затем с третьего по двенадцатый и т.д.

echo arg9=%9
shift
echo arg10=%9
shift
echo arg11=%9
shift
echo arg12=%9
shift
echo arg13=%9

В итоге bat файл успешно определяет и десятый параметр, и все остальные:

arg9=value9
arg10=value10
arg11=value11
arg12=value12
arg13=

При сдвиге дальше последнего параметра %9 возвращает пустое значение, в данном случае это 13-й параметр. Это позволяет определить, когда параметры закончились.

Сдвиг заданного числа параметров

Чтобы не двигать все параметры, у команды SHIFT есть специальный ключ:

SHIFT /n

Команда SHIFT при включении расширенной обработки команд поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть от 0 до 9.

Например, в следующей команде:

SHIFT /2

%3 заменяется на %2, %4 на %3 и т.д., а %0 и %1 остаются без изменений.

То есть можно указать, чтобы сдвигались не все параметры.

Включение расширенной обработки команд

Делается командой SETLOCAL ENABLEEXTENSIONS:

Пакетная команда SETLOCAL принимает необязательные аргументы:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
Это позволяет включить или отключить расширенную обработку команд.
Эти аргументы переопределяют параметры CMD /E:ON или /E:OFF. Для
получения дополнительных сведений введите CMD /?.

Как видно из справки, расширенную обработку команд можно включить также через CMD /E:ON

Разбор командной строки

Этот способ получения параметров основан на чтении всей строки параметров %* в цикле FOR:

for %%A in (%*) do (
    echo %%A
)

Этот способ взят с StackOverflow.

Если добавить в цикл сохранение параметров, то можно сохранить все параметры в переменные с номерами:

setlocal enabledelayedexpansion
set /a arg_number=1
for %%a in (%*) do (
    set arg!arg_number!=%%a
    set /a arg_number=!arg_number!+1
)

echo arg1=%arg1%
echo arg10=%arg10%
echo arg11=%arg11%

Вывод:

arg1=value1
arg10=value10
arg11=value11

Другой вариант присваивания значений — сразу в цикле:

setlocal enabledelayedexpansion
set /a arg_number=1
for %%a in (%*) do (
    echo arg_!arg_number!=%%a
    if !arg_number! == 1 set filename=%%a
    if !arg_number! == 2 set directory=%%a
    rem ...
    if !arg_number! == 11 set computer_name=%%a
    set /a arg_number=!arg_number!+1
)
echo filename=%filename%

Использование пакетных файлов для Windows

Большинство пользователей периодически выполняют повторяющиеся задачи, многие из которых можно заменить одной командой или запуском одного файла. Из статьи вы узнаете, как автоматически решать часто возникающие задачи, не используя при этом никакого дополнительного ПО. Речь идет о пакетных файлах, позволяющих осуществлять несколько действий автоматически, без участия пользователя. Необходимо лишь составить пакетный файл с перечнем команд и запускать его в случае надобности.

Технология пакетных файлов

Пакетные файлы (их также называют командными или bat-файлами) – текстовые документы с расширениями .bat или .cmd, содержащие последовательность команд, которые можно запустить подобно любому приложению Windows. Такая технология позволяет пользователю создавать программы пакетной обработки, выполняющие несколько последовательно записанных команд. Это очень удобно, если периодически приходится совершать повторяющиеся действия. Пакетные файлы предоставляют гибкие возможности создания сценариев, с их помощью возможно написание и маленьких линейных последовательностей команд, и сложных сценариев с условными ветвлениями и циклами. Технология файлов пакетной обработки используется во многих ОС и оболочках, среди которых Windows, OS/2, Mac OS и Linux-подобные системы.

Создание и использование

Запуск и результаты работы пакетного файла
Получение детальной справки по инструкции if
Получение списка команд

Начиная работу, нужно тщательно продумать последовательность команд, которые будут выполняться. Для написания пакетного файла необходимо создать текстовый документ с расширением .bat или .cmd, ввести в него нужные команды (каждую с новой строки) и сохранить. Это можно проделать в любом текстовом редакторе, скажем, в Блокноте, но если вы используете в командах пути к файлам с русскими символами или выдачу сообщений на русском языке, необходимо задействовать редакторы, которые поддерживают DOS-кодировку, например стандартный редактор менеджера FAR. В любое время доступно редактирование содержимого командных файлов. Рекомендуется также в целях безопасности просматривать их содержимое перед запуском, если они созданы не вами и получены из сомнительных источников.

Для выполнения такого файла необходимо запустить его, как и всякое приложение Windows. Каждая строка bat-файла представляет собой действие (команду). Это могут быть команды для работы с файлами и папками, запуск приложения или другого пакетного файла, работа с реестром, вывод на экран сообщений и т. д., можно выполнять любые действия, поддерживаемые интерпретатором командной строки. Для получения списка этих команд следует нажать <Windows+R> (или Пуск→Выполнить…), ввести в поле запуска cmd (command – для Windows ниже версии NT) и нажать ОК, после чего в открывшемся окне командной строки набрать help и нажать Enter. Детальную справку по конкретной команде можно получить, введя ее имя, пробел и /?, например copy /?Enter. Кроме команд командной строки, в пакетных файлах можно вызывать другие bat-файлы, внешние утилиты (и, допустим, defrag), а также любые приложения и сервисы (только для NT-систем).

Рассмотрим такой пример. Вы постоянно работаете с тремя файлами, которые находятся в разных каталогах жесткого диска, и часто создаете их резервные копии на USB-flash-drive. Для этого потребуется заходить в каждый каталог и копировать файлы по отдельности на флэшку. Если написать простенький пакетный файл, то перечисленные действия сведутся к его запуску. Предположим, что полные пути и имена файлов таковы: D:WorkProfits.xls, D:HomeHome.doc и C:MyDocsOplata.doc, а G: – съемный флэш-диск для резервной копии. Тогда нужный пакетный файл будет выглядеть так:

copy D:WorkProfits.xls G:Backup

copy D:HomeHome.doc G:Backup

copy C:MyDocsOplata.doc G:Backup

pause

Первые три строки непосредственно копируют файлы в каталог Backup на USB-накопитель. В последней – команда ожидания нажатия любой клавиши. Она используется для того, чтобы после выполнения предыдущих команд не закрылось окно командной строки и можно было увидеть результаты выполнения bat-файла. Данный пакетный файл будет исполнен независимо от своего названия и местоположения на компьютере. Теперь для резервного копирования нужно только запустить созданный файл.

Пакетные файлы поддерживают передачу параметров командам. Это очень удобно, если необходимо создавать гибкие bat-файлы для автоматизации целого ряда типовых задач. Для передачи параметров надо при вызове после имени файла поставить пробел и указать один или несколько параметров. Запускать пакетный файл с параметрами можно либо из командной строки, либо с помощью созданного для него ярлыка. Однако в последнем случае теряется принцип универсальности, так как ярлык будет содержать вызов файла с заранее введенными параметрами. Можно также создать несколько ярлыков для запуска одного bat-файла с разными параметрами. В тексте пакетного файла параметры представляются с помощью знака % и номера параметра при вызове, начиная с 1.

Вернемся к описанному выше примеру резервного копирования. Если кроме флэш-накопителя необходимо также периодически копировать указанные файлы на переносной винчестер или на компьютер в локальной сети, то можно модифицировать bat-файл следующим образом:

copy D:WorkProfits.xls %1

copy D:HomeHome.doc %1

copy C:MyDocsOplata.doc %1

pause

Теперь путь назначения файла будет указываться при запуске. Для резервного копирования на флэшку необходимо набрать в командной строке D:Mybatsbackup.bat G:Backup и нажать Enter. D:Mybatsbackup.bat – полный путь и имя исполняемого файла (если он находится в текущей папке – путь не обязателен), а G:Backup – первый параметр, определяющий местоположение резервных копий. При выполнении команды копирования вместо %1 будет подставлен первый параметр G:Backup. Используя переносной винчестер (H:) с папкой Copydir пакетный файл необходимо вызывать так: D:Mybatsbackup.bat H:Copydir. Если данный bat-файл был запущен без параметров, то указанные файлы скопируются в папку, где расположен пакетный файл. В данном случае файлы при копировании будут заменены без подтверждения, для выдачи же запроса подтверждения замены необходимо добавить ключ /-Y, тогда каждую команду копирования нужно записать так: copy /-Y D:WorkProfits.xls %1. При создании пакетных файлов для резервного копирования рекомендуется изучить команду xcopy, которая представляет собой расширенную версию copy.

При написании bat-файлов можно использовать ветвления, условные и безусловные переходы, циклы, а также вызов внешних программ и других пакетных файлов. Для рассмотренного примера желательно перед копированием проверять существование каталога назначения, введенного в качестве параметра. Для этого необходимо добавить в начало файла, перед операциями копирования, следующую строку:

if not exist %1 mkdir %1.

Эта запись означает: если путь или конечный каталог, введенный в качестве параметра, не существует, то во избежание ошибок необходимо его создать перед резервным копированием. Если введенный путь не существует и такая обработка отсутствует, то файлы будут скопированы некорректно.

Пакетные файлы, как и командная строка, предоставляют возможность работы с переменными окружения, которые хранят различные системные параметры. Перечень переменных окружения можно получить в разделе «Общие сведения о командной оболочке» справки Windows. Например %WINDIR% – размещение каталога ОС Windows, а %TEMP% и %TMP% содержат пути к системной и пользовательской папкам для временных файлов соответственно.

Рассмотрим следующий пример. Многие пользователи иногда очищают содержимое временных каталогов. Для этого необходимо перейти в соответствующую папку (их может быть и две), выделить содержимое и удалить. После написания простенького bat-файла очистка временных каталогов выполняется запуском файла с Рабочего стола. К тому же саму папку удалить нельзя, а при выделении ее содержимого мышкой без использования специальной команды (Выделить все или Ctrl+A) все скрытые файлы и папки останутся нетронутыми. Итак, содержимое файла:

del /F /S /Q %temp%

del /F /S /Q %tmp%

pause

Первые две строки выполняют удаление содержимого системной и пользовательской папок для временных файлов. Для команды del использованы специальные модификаторы (ключи): /F – удаление файлов, помеченных «только для чтения», /S – удаление из всех подкаталогов, а /Q избавляет пользователя от подтверждения. Справку по этой и другим командам интерпретатора со всеми возможными модификаторами можно получить, набрав имя команды /?Enter. Последняя команда pause необходима, если вам интересен отчет об удалении файлов.

.bat или .cmd

Термин «пакетный файл» является устоявшимся и может подразумевать пакетный либо командный файл. Несмотря на внешнее сходство процедур создания и применения, пакетные и командные файлы имеют множество различий.

Пакетные файлы (.bat) использовались еще в ранних версиях MS-DOS как средство выполнения нескольких команд. Эти файлы выполнялись командным интерпретатором command.com и были основным средством автоматизации.

Начиная с Windows NT, используются командные файлы (.cmd), но пакетные также поддерживаются. Командные файлы являются усовершенствованной технологией пакетных и выполняются интерпретатором cmd.exe.

Пакетные файлы поддерживаются вплоть до Win-dows Vista, но обладают ограниченным набором команд по сравнению с командными файлами и выполняются медленнее.

Для Windows NT и выше рекомендуется использование командных файлов, для более старых версий – файлов пакетной обработки, так как ничего другого не пред-усмотрено.

Варианты запуска

Ярлык для запуска пакетного файла с параметром

Есть несколько способов запуска пакетных файлов вручную: набрать полный путь, имя файла (и параметры) в командной строке или в диалоговом окне Выполнить и нажать Enter, создать ярлык для файла и поместить его на Рабочий стол или в меню Пуск, а также непосредственно запустить bat-файл из файлового менеджера.

С помощью Планировщика заданий возможно планирование запуска bat-файлов по расписанию в выбранное время в определенные дни недели автоматически, один раз или периодически. Для этого в Панели управления следует запустить апплет Назначенные задания и с помощью Мастера планирования заданий создать необходимое расписание.

Существует также возможность автозапуска пакетных файлов без использования Планировщика при загрузке ОС, для чего есть несколько способов, простейшим из которых является создание ярлыка к нужному файлу и помещение его в папку Пуск→Программы→Автозагрузка. Для автоматического запуска пакетных файлов можно также использовать дополнительное ПО.

Полезное применение

Пакетные файлы применяются программистами, системными администраторами и пользователями для выполнения часто используемых рутинных операций. Наиболее распространенными из таких задач являются: создание инсталляционных пакетов, выполнение пакетного переименования/удаления/копирования файлов и папок, работа с реестром, последовательный запуск нескольких приложений, фоновая печать документов и многие другие.

Автозапуск по расписанию удобен для резервного копирования или архивации файлов, копирования некоторых веток или всего реестра, начала антивирусного сканирования, очистки временных каталогов и корзины, выключения компьютера в заданное время и т. д.

Bat-файлы и Windows Vista

Как и ее предшественники, Windows Vista поддерживает технологию пакетных и командных файлов. По сравнению с XP увеличилось количество выполняемых интерпретатором команд, а также расширилась функциональность некоторых ранее существующих команд. Сохраняется восходящая совместимость: bat-файлы, созданные в предыдущих версиях Windows, будут корректно работать под управлением Windows Vista. Полный перечень команд может быть получен из справки командной строки описанным выше способом. Возможен запуск созданных файлов вручную или автоматически. Для выполнения пакетным файлом некоторых системных действий необходимо запускать его с правами администратора.

Как «закомментировать» (добавить комментарий) в пакете / cmd?

Комментарий к строке

Для комментирующей строки используйте REM или :: хотя :: может не работать внутри скобок

в задержанных строках расширения, начинающихся с ! <Разделитель> , будет проигнорирован, поэтому его можно использовать для комментариев:

  @ эхо выкл.

setlocal enableDelayedExpansion

активировано расширение с задержкой эха
!; отложенная строка комментария к расширению
эхо конец демонстрации
  

Комментарий в конце строки

Для комментариев в конце строки вы можете снова использовать rem и :: в сочетании с и :

  echo --- & :: comment (не должна быть последней строкой в ​​скрипте)
echo --- & rem комментарий
  

Комментарий в конце файла

Поскольку заметка будет проанализирована после команды exit , вы можете использовать ее для добавления комментариев в конец файла:

  @ эхо выкл.

эхо-команды

выход / б

-------------------
комментирует в конце
файла
------------------
  

Встроенные комментарии

Расширение несуществующих переменных заменяется ничем, и, поскольку установка переменной с = довольно сложна, вы можете использовать это для встроенных комментариев:

  @ эхо выкл.

echo long command% = это комментарий =% со встроенным комментарием
  

Многострочные комментарии

Для многострочных комментариев можно использовать GOTO (для внешних скобок) и REM с условным исполнением (для внутренних скобок).Подробнее здесь:

  @ эхо выкл.

сценарий запуска эха

goto: end_comments
 Комментируемая линия
 еще одна прокомментированная строка
: end_comments

эхо продолжить сценарий

(
    эхо-демонстрация выключена
    rem / || (
      линии с
      Комментарии
    )
    эхо многострочный комментарий внутри
    эхо-скобки
)
  

И та же техника, украшенная макросами:

  @ эхо выкл.

:: Макрос GOTO comment
установить "[: = goto:] %%"
:: скобки комментируют макросы
установить "[= rem / || (" & set "] =)"

:: тестирование
эхо без комментариев 1

% [:%
  мульти
  линия
  комментарий вне скобок
%:]%

эхо без комментариев 2

% [:%
  второй мульти
  линия
  комментарий вне скобок
%:]%

:: Макрос GOTO нельзя использовать внутри для
для %% a в (первая секунда) сделайте (
    echo первая не прокомментированная строка выполнения %% a
    % [%
        многострочный
        комментарий
    %]%
    echo вторая не прокомментированная строка выполнения %% a
)
  

2 способа запуска нескольких команд в CMD

Командная строка по-прежнему является очень полезным инструментом, когда дело доходит до автоматизации и выполнения задач, которые сложно выполнить при работе с графическим пользовательским интерфейсом.Например, я часто очищаю кеши DNS и DHCP своих компьютеров с помощью командной строки. Хотя эта задача может быть утомительной при визуальном выполнении, командная строка может выполнить ее за считанные секунды.

В CMD бывают случаи, когда пользователь должен запускать несколько команд одновременно. Ниже приведены некоторые ситуации, в которых вы можете оказаться, и каждая из них будет рассмотрена по очереди.

  • Выполнять несколько команд одновременно
  • Последовательно запускать несколько команд
  • Выполнять следующую команду в очереди только в случае успешного выполнения первой.
  • Выполняйте следующую команду в очереди, только если первая не была выполнена успешно.

Вот несколько вариантов использования, которые мы рассмотрим в этой статье.

Запуск нескольких команд с помощью пакетного сценария

Пакетные сценарии можно использовать для одновременного запуска нескольких команд и инструкций на вашем компьютере. Используя пакетный скрипт, вы сможете автоматически выполнять все свои команды одну за другой. Все, что вам нужно сделать, это выполнить следующие действия.

  1. Откройте новый файл Блокнота, в котором нет текста.
  2. Введите все команды в файле Блокнота, которые вы хотите выполнять вместе. Например, я хочу сначала очистить DNS, а затем обновлю его. Для этого мне нужно запустить четыре команды одну за другой. Но здесь я добавил все команды в один файл.
  3. Теперь сохраните этот файл с соответствующим именем и не забудьте сохранить файл с расширением «.bat». В противном случае вы не сможете запустить скрипт.
  4. Перейдите в папку, в которой вы сохранили файл пакетного сценария.Дважды щелкните по нему, чтобы запустить файл. Это не займет много времени, чтобы успешно выполнить все ваши команды.

Это способ легко и быстро запускать несколько команд. Надеюсь, это сработает для вас. Если вы не хотите, чтобы ваши команды выполнялись с пакетным скриптом, вы можете применить другие решения, описанные ниже.

Выполнение нескольких команд через &, && и || sign

С помощью этого решения я даю вам три варианта выполнения нескольких команд в CMD.

  1. Первый использует «&» Объедините две ваши команды со знаком «&» . Это позволит вашей второй команде работать после полного выполнения первой команды.
    Например:
    ipconfig / flushdns & ipconfig / Renew

    Вторая команда будет запущена, как только первая команда будет полностью выполнена. Не имеет значения, успешно ли выполнилась первая команда.
  2. Но если вы хотите запустить вторую команду после успеха первой команды.Затем введите “&&” знак между двумя вашими командами.
    ipconfig / flushdns && ipconfig / refresh

  3. В третьем случае вторая команда будет запущена только в том случае, если первая команда не была успешно выполнена. Для этого введите «||». между двумя командами.
    ipconfig / flushdns || ipconfig / Renew
Командный переключатель Функция Примеры
& Выполнить вторую команду независимо от того, успешно ли завершилась первая команда ipconfig / flush обновить
&& Выполнять вторую команду только в случае успешного выполнения первой команды ipconfig / flushdns && ipconfig / refresh
|| Выполнять вторую команду только в случае сбоя первой команды ipconfig / flushdns || ipconfig / Renew

Вы также можете использовать комбинацию переключателей в одной строке.Например, cmd && success action || действие сбой и всегда запускать . Все эти команды также могут быть выполнены в пакетном файле. Те же параметры командной строки можно использовать и в PowerShell.

Надеюсь, это поможет вам автоматизировать ваши команды так, как вы хотите. Командная строка сэкономит вам много времени и даст вам гибкость в работе. Как вы используете командную строку? Поделитесь своими мыслями в комментариях ниже.

Объявление

См. Также:

Начало работы с пакетными файлами в FreeDOS

В Linux обычно создают сценария оболочки для автоматизации повторяющихся задач.Точно так же в FreeDOS, реализации старых операционных систем DOS с открытым исходным кодом, вы можете создать командный файл , содержащий несколько команд FreeDOS. Затем вы можете запустить свой командный файл для выполнения каждой команды по порядку.

Пакетный файл создается с помощью текстового редактора ASCII, такого как приложение FreeDOS Edit. После создания командного файла вы сохраняете его с именем файла и расширением .bat . Имя файла должно быть уникальным. Если вы используете имя команды FreeDOS в качестве имени вашего собственного файла, команда FreeDOS, вероятно, будет выполняться вместо вашего командного файла.

Практически все внутренние и внешние команды FreeDOS могут использоваться в пакетном файле. Когда вы создаете командный файл, вы, по сути, пишете программу. Пакетные файлы FreeDOS могут не обладать мощью структурированного языка программирования, но они могут быть очень удобны для быстрых, но повторяющихся задач.

Хорошая привычка № 1 для любого программиста — это добавлять в программу комментарии, объясняющие, что делает код. Это очень хорошая вещь, но вы должны быть осторожны, чтобы не обмануть операционную систему, заставив ее выполнить ваши комментарии.Чтобы избежать этого, поместите REM (сокращение от «замечание») в начале строки комментария.

FreeDOS игнорирует строки, начинающиеся с REM . Но любой, кто просматривает исходный код (текст, который вы написали в своем пакетном файле), может прочитать ваши комментарии и понять, что он делает. Это также способ временно отключить команду, не удаляя ее. Просто откройте свой командный файл для редактирования, поместите REM в начало строки, которую вы хотите отключить, и сохраните его.Если вы хотите снова включить эту команду, просто откройте файл для редактирования и удалите REM . Этот метод иногда называют «комментированием» команды.

Подготовка к работе

Прежде чем вы начнете писать свои собственные командные файлы, я предлагаю создать временный каталог в FreeDOS. Это может быть безопасное место для вас, чтобы поиграть с пакетными файлами без случайного удаления, перемещения или переименования важных системных файлов или каталогов. В FreeDOS вы создаете каталог с помощью команды MD :

 

C: \> MD TEMP
C: \> CD TEMP
C: \ TEMP>

Команда ECHO FreeDOS управляет тем, что отображается на экране при запуске командного файла.Например, вот простой однострочный командный файл:

  ECHO Привет, мир  

Если вы создадите этот файл и запустите его, вы увидите предложение, отображаемое на экране. Самый быстрый способ сделать это — из командной строки: используйте команду COPY , чтобы взять ввод с клавиатуры ( CON ) и поместить его в файл TEST1.BAT . Затем нажмите Ctrl + Z , чтобы остановить процесс копирования, и нажмите Return или Enter на клавиатуре, чтобы вернуться к подсказке.Z

C: \ TEMP> TEST1
Привет, мир

Это может быть полезно, если вы хотите отобразить фрагмент текста. Например, вы можете увидеть на экране сообщение о том, что вам следует подождать, пока программа завершит свою задачу, или в сетевой среде вы можете увидеть сообщение для входа в систему.

Что делать, если вы хотите отобразить пустую строку? Вы можете подумать, что команда ECHO сама по себе сработает, но одна только команда ECHO просит FreeDOS ответить, включен ли ECHO :


 

Чтобы получить пустую строку, используйте знак + сразу после ECHO :


  

Переменные командного файла

Переменная — это место хранения информации, которую вам нужно временно запомнить в командном файле.Это жизненно важная функция программирования, потому что вы не всегда знаете, какие данные вы хотите использовать в своем командном файле. Вот простой пример для демонстрации.

Создать TEST3.BAT :

 

@MD BACKUPS
COPY% 1 BACKUPS \% 1

Переменные обозначаются символом процента, за которым следует число, поэтому этот пакетный файл создает подкаталог BACKUPS в вашем текущем каталоге, а затем копирует переменную % 1 в папку BACKUPS .Что это за переменная? Это вам решать, когда вы запускаете командный файл:

.
 

C: \ TEMP> TEST3 TEMP1.BAT
TEST1.BAT => BACKUPS \ TEST1.BAT

Ваш командный файл скопировал TEST1.BAT в подкаталог с именем BACKUPS , потому что вы определили этот файл в качестве аргумента при запуске вашего командного файла. Ваш командный файл заменил TEST1.BAT на % 1 .

Переменные позиционные. Переменная % 1 — это первый аргумент, который вы предоставляете своей команде, а % 2 — второй, и так далее.Предположим, вы создали пакетный файл для вывода содержимого каталога:

  DIR% 1  

Попробуйте запустить:

 

C: \ TEMP> TEST4.BAT C: \ HOME
СТАТЬИ
BIN
ЧИТАТЫ
ИГРЫ
DND

Работает, как ожидалось. Но это не удается:

 

C: \ TEMP> TEST4.BAT C: \ HOME C: \ DOCS
СТАТЬИ
BIN
CHEATSHEETS
GAMES
DND

Если вы попробуете это, вы получите список первого аргумента ( C: \ HOME ), но не второго ( C: \ DOCS ).Это связано с тем, что ваш командный файл ищет только одну переменную (% 1 ), и, кроме того, команда DIR может использовать только один каталог.

Кроме того, вам действительно не нужно указывать расширение командного файла при его запуске — если только вам не повезло выбрать имя для командного файла, которое соответствует одной из внешних команд FreeDOS или чему-то подобному. Когда FreeDOS выполняет команды, он идет в следующем порядке:

  1. Внутренние команды
  2. Внешние команды с расширением *.Расширение COM
  3. Внешние команды с расширением * .EXE
  4. Пакетные файлы

Несколько аргументов

Хорошо, теперь перепишите файл TEST4.BAT , чтобы использовать команду, которая принимает два аргумента, чтобы вы могли увидеть, как это работает. Сначала создайте простой текстовый файл с именем FILE1.TXT с помощью приложения EDIT . Поместите внутри какое-нибудь предложение (например, «Hello world») и сохраните файл в рабочем каталоге TEMP .

Затем используйте EDIT , чтобы изменить файл TEST4.BAT :


 

Сохраните его, затем выполните команду:

  C: \ TEMP \> TEST4 FILE1.TXT FILE2.TXT  

После запуска командного файла вы увидите список каталогов вашего каталога TEMP . Среди перечисленных файлов у вас есть FILE1.TXT и FILE2.TXT , которые были созданы вашим командным файлом.

Вложенные командные файлы

Еще одна особенность пакетных файлов состоит в том, что они могут быть «вложенными», что означает, что один пакетный файл может быть вызван и запущен внутри другого пакетного файла.Чтобы увидеть, как это работает, начните с простой пары командных файлов.

Первый файл называется NBATCh2.BAT :

 

@ECHO OFF
ECHO Hello
CALL NBATCh3.BAT
ECHO world

Первая строка ( @ECHO OFF ) незаметно сообщает командному файлу показывать только вывод команд (а не сами команды) при его запуске. Вы, наверное, заметили в предыдущих примерах, что было много отзывов о том, что делает командный файл; в этом случае вы разрешаете своему пакетному файлу отображать только результаты.

Второй командный файл называется NBATCh3.BAT:

  эхо из FreeDOS  

Создайте оба этих файла с помощью EDIT и сохраните их в подкаталоге TEMP. Запустите NBATCh2.BAT , чтобы увидеть, что произойдет:

 

C: \ TEMP \> NBATCh2.BAT
Привет
из мира FreeDOS

Ваш второй командный файл был выполнен из первого с помощью команды CALL , которая предоставила строку «from FreeDOS» в середине вашего сообщения «Hello world».

Скрипты FreeDOS

Пакетные файлы — отличный способ написать свои собственные простые программы и автоматизировать задачи, которые обычно требуют большого набора текста. Чем больше вы используете FreeDOS, тем больше вы знакомитесь с ее командами, и как только вы узнаете команды, вам достаточно просто перечислить их в пакетном файле, чтобы ваша система FreeDOS облегчила вам жизнь. Попробуйте!


Некоторая информация в этой статье была ранее опубликована в уроке 15 DOS: Введение в командные файлы и уроке 17 DOS: Переменные командного файла; вложенные командные файлы (оба CC BY-SA 4.0).

Пакетный язык DOS: внутренние и внутренние команды

>

Пакетный язык DOS: внутренние и внутренние команды
Внутренние и внутренние команды

ЗВОНИТЕ
очень похожи на звонки на языках высокого уровня. Это вызывает сохранение имени вызывающего командного файла и его местоположения (по COMMAND.COM ), чтобы выполнение можно было возобновить со следующей строки файла, когда вызванный командный файл завершается.Поскольку каждый вызов CALL потребляет некоторую память, пока не будет очищается возвратом вызываемой программы, существует конечный предел для числа из CALL , которые могут быть вложены. Я не знаю, что это за лимит, или какие-либо другие подробности о том, как вызов управляется внутри COMMAND.COM . Вы можете продемонстрировать наличие лимита с этой программой

 
 @ эхо выкл
 позвонить% 0
 :конец
  
который будет просто сидеть там с мигающим курсором довольно долго, прежде чем выдать сообщение об ошибке и завершение (ниже приведен дамп экрана).
 
 H: \> тест
Недостаточно памяти
 H: \>
  
CALL позволяет вызывать командный файл из командного файла без потери твое место в первом. Два командных файла могут быть разными или одним и тем же файлом. Когда они совпадают, возникает эффект рекурсии. CALL вызывает COMMAND.COM для сохранения имя и указатель файла для текущего файла перед вызовом второго и повторным вводом исходный файл в месте, указанном указателем файла при его завершении. ЗВОНИТЕ также можно используется для вызова исполняемых файлов, хотя COMMAND.COM , похоже, не делает ничего другого, когда вы это делаете. Однако есть определенная гибкость в использовании CALL для вызова исполняемых файлов: позже вы можете заменить файл .EXE с файлом .BAT с таким же именем, чтобы изменить действие. Также безопаснее использовать ПОЗВОНИТЕ , если вы не знаете наверняка, что программа, которую вам сказали, находится в на самом деле .COM или .EXE, а не. .BAT файл. ЗВОНИТЕ и пригодится в ДЛЯ циклы как в пакетных файлах, так и из командной строки, чтобы предотвратить завершение цикла преждевременно, когда действие является пакетным файлом ( FOR% a in (foo.bat bar.bat baz.bat) do% a будет выполнить только FOO, но FOR% a in (foo.bat bar.bat baz.bat) вызовет% a выполнит все трое).

CD изменяет каталог по умолчанию либо на заданном по умолчанию, либо на заданном диске. Важно помнить, что при изменении каталога на нестандартное диск по умолчанию сам диск не меняется:

 
 c:
 cd d: \ foo
  
оставляет вас на диске C :, но меняет каталог по умолчанию на диске D: в \ FOO.Иногда это бывает полезно, но следует иметь в виду, что в Windows, каталог по умолчанию на любом диске может быть изменен другая программа во время работы командного файла — очень хорошая идея ничего не предполагайте о каталоге по умолчанию, хотя не во всех примерах в эта книга действительно принимает рекомендованные меры предосторожности. Даже не по умолчанию каталог на диске по умолчанию для окна, в котором находится командный файл. можно считать стабильным.

При работе под Windows редко нужно помнить, что предыдущий каталог был при его изменении, но под обычным DOS это часто бывает.Доступно несколько утилит, которые открывают и открывают каталоги. утилит стоит использовать, но поскольку эта книга посвящена тому, что можно сделано с использованием только того, что идет с MSDOS 6.22, они здесь игнорируются. Для большинства необходимо сохранить только каталог по умолчанию на одном диске и восстановлено:

 
 @ эхо выкл
 реж
 dir | найти "Каталог">} {. bat
 echo set dir = %% 2> Director.bat
 вызов }{
 del} {. bat
 дель Director.bat
 CD \
 реж
 cd% dir%
 реж
 :конец
  

иллюстрирует это — обратите внимание, что он предполагает, что каталог по умолчанию записываемый и стабильный.Обычный способ обработки нестабильных каталогов: указав каталог, но здесь это не работает, потому что там не является разумным способом включить каталог в} {. BAT. Работа вокруг Я использую это для сопоставления диска с каталогом и выполнения там моей работы DOS — специальный диск не должен использоваться для каких-либо программ Windows, хотя он безопасно, чтобы многие программы Windows могли работать с файлами. Это особенно важно сделать что-то подобное, если рабочий каталог находится на тот же диск, что и винда.


DIR создает список файлов и / или подкаталогов в текущий или данный каталог. Он имеет ряд переключателей, которые изменяют его действие и вывод часто перенаправляется в файлы или через фильтры для изменения вывод даже больше. HELP на DIR необычайно подробен и точен, и вряд ли вводит в заблуждение. Так как я действительно не могу сказать лучше, чем это сделал М.С., см. запись HELP и / или встроенная синтаксическая информация (переключатель /?). DIR — это внутренняя команда и не имеет возврата уровня ошибки.Одно расширение его функциональности который был опущен в команде, но очень полезен, так это возможность отображать списки для нескольких шаблонов в одной команде:

 
 каталог * .exe * .com * .bat * .pif
  
не работает, но, безусловно, пригодится для перечисления всех программ в каталог. Излишне говорить, что я написал командный файл, который делает это: DIRX.BAT.

Опять же, см. HELP DIR или DIR /? для синтаксиса (просто не так много способов переписать материал, и я не хочу просто копировать существующий материал для этой книги.если ты настаиваю, дамп /? все здесь в отдельном файле (я, наверное, закончу делать это для большинства команд, если MS не получит в моем случае об этом). Файл был сгенерирован командой

 
 dir /? > dirhlp.txt
  

ECHO (вкл., Выкл. Или текст)
на самом деле две команды: одна для управления статус ECHO (будут ли отображаться командные строки в файле или только сообщения они генерируют), используя аргументы ON и OFF, и один для отображения текста на консоли (через STDOUT (СТАНДАРТНЫЙ ВЫХОД)).Тот факт, что статус ECHO не влияет на ECHO ed. текст указывает на эту разницу. Большинство командных файлов начинаются с @ECHO OFF для подавления отображения выключить все команды в файле (символ ‘@’ подавляет эхо строки, которую он начинает, поэтому не отображается даже команда ECHO OFF). Если командный файл всегда вызывается или вызывается по другому, только первая должна иметь команду @ECHO OFF, которая останется в силе пока COMMAND.COM остается в пакетном режиме.Обратите внимание, что это не влияет на вторичный командные процессоры:

 
 @if "% 1" == "" эхо выключено
 если "% 1" == "" команда / c% 0 foo
 :конец
  

ECHO и LT; текст и GT; похоже, был предоставлен как средство отправки сообщений пользователь, но есть и другие варианты использования. Плохо документированный синтаксис ECHO. (обратите внимание на ‘.’ в конце команды) ECHO — пустая строка. Это очень полезно, если подключено к определенные команды для ввода & LT; Enter & GT; требуется для завершения команды:

 
 @ эхо выкл
 эхо.| Дата
 эхо. | время
 :конец
  

ECHO также используется аналогичным образом с ‘y’ или ‘n’ для обеспечения автоматического ответа на команда, требующая ответа Да / Нет. Чаще всего это используется для автоматически удалять мусор в каталоге TEMP во время AUTOEXEC.BAT:

 
 эхо у | дель с: \ темп \ *. *
  
Но будьте осторожны — всегда указывайте точный диск и каталог полностью — никогда не делайте этого Сюда
 
 установить TEMP = c: \ temp
 эхо у | del% temp% \ *.*
  
потому что это зависит от фактической установки переменной — а аварии действительно случаются. Сбой команды set приводит к тому, что команда DEL удаляет все файлы в текущем каталог, который, скорее всего, будет корнем загрузочного диска.

ECHO , без каких-либо аргументов, просто отображает состояние эхо-сигнала: ВКЛ или ВЫКЛ.

В некоторых случаях кажущийся правильным синтаксис не вызывает сообщений об ошибках. но тоже не работает. Большинство из них связано с условным перенаправлением:

 
 для %% a in (foo) выполните echo %% a> baz
 если нет!% 1 ==! echo foo> бар
  

не работают, по крайней мере, не надежно.Намного безопаснее поставить перенаправленное эхо команду в другом месте и получить ее с помощью CALL или перепрыгнуть эхо с помощью перевернутое условное GOTO:

 
 если!% 1 ==!} {перейти% 2
 для %% a in (foo) вызовите% 0} {report %% a
 если!% 1 ==! goto cont
 echo foo> бар
 : cont
 перейти к концу
 :отчет
 эхо% 3> баз
 :конец
  

Команда FOR x in (set) do
имеет множество применений. Оказывается, что исходное намерение, по-видимому, состоит в том, чтобы возвращать имена файлов в списке или соответствовать шаблону по одному, и он по-прежнему очень полезен для такой работы:

 
 @ эхо выкл
 для %% a в (*.bat), если не существует. \ bak \ %% a copy %% a. \ bak
 :конец
  
гарантирует, что есть резервная копия каждого из командных файлов по умолчанию каталог, но копирует только те, для которых еще нет резервных копий. Это не проверьте, совпадают ли они, но резервные копии вполне могут быть предыдущие версии. Обратите внимание, что переменная представляет собой одну букву перед двойным знаком «%». Один из них удаляется во время обработки команды, так что настоящее имя — «% a», которое вы используете при использовании этого синтаксиса из командная строка.(Не обязательно, чтобы в имени переменной использовалась буква, но цифры запрещены, и принято использовать буквы, которые что-то означают или находятся в в алфавитном порядке (для многократного использования ДЛЯ в одном файле). FOR также может использоваться и для других целей, например, для обработки списка элементов:
 
 для %% a в (* .bat * .exe, * .com) не существует, если не существует. \ bak %% a copy %% a. \ bak
  
делает то же, что и в первом примере, за исключением всех трех из этих расширений.

Список (набор) не должен иметь ничего общего с файлами, так как следующие трехзначный счетчик показывает:

 
 @ эхо выкл
 if "% 1" == "} {" goto% 2
 установить цель =% 1
 команда / e: 1024 / c% 0} {pass0
 перейти к концу
 : pass0
 для %% a in (0 1 2 3 4 5 6 7 8 9) вызовите% 0} {pass2 %% a
 перейти к концу
 : pass2
 для %% b в (0 1 2 3 4 5 6 7 8 9) вызовите% 0} {pass3% 3 %% b
 перейти к концу
 : pass3
 для %% c в (0 1 2 3 4 5 6 7 8 9) вызовите% 0} {pass4% 3% 4 %% c
 перейти к концу
 : pass4
 установить счетчик =
 : loop1
 если "% 3" == "" перейти к выполнению
 REM - раскомментируйте следующую строку, чтобы включить подавление ведущих нулей
 REM if "% 3" == "0" if "% count%" == "" goto x1
 set count =% count %% 3
 : x1
 сдвиг
 goto loop1
 :сделано
 if "% count%" == "" перейти в конец
 : код пользователя
 Код пользователя REM для использования номера находится здесь
 : userend
 если "% target%" == "% count%" выход
 :конец
  
Это было написано в ответ на вопрос о том, как переименовывать файлы с помощью последовательные числа.Он принимает целевое число, за пределами которого он не будет считается аргументом, и пользовательский код будет использовать имя файла, переданное как второй аргумент как файл для переименования. Пользовательский код сгенерирует имя и проверить наличие файла с таким именем, продолжить цикл пока есть один, и выйдите после нахождения первого неиспользованного номера. Я пропустил этот код, поскольку он относился к одному конкретному пользователю. Обратите внимание, что если вы используете ведущие нули (по умолчанию), целевой аргумент должно состоять ровно из трех цифр — используйте ведущие нули для одно- и двузначных чисел.

Более удобная форма вышеупомянутого (называемая RENnnn.BAT ) принимает пять аргументов: имя файла, который нужно переименовать, и (необязательно) префикс, который нужно поставить перед номер, применяемое расширение, ограничивающее число и путь к применить к данному файлу. Если ограничение не указано, по умолчанию используется 999. Очевидно, что если используются какие-либо из более поздних опций, необходимо также указать более ранние — ‘,’ может быть используется, чтобы указать, что аргумент имеет значение NULL.

 
 @ эхо выкл
 if "% 1" == "} {" goto% 2
 установить цель =% 999
 установить fname =% 1
 установить префикс =% 3
 установить ext =% 4
 установить dir =% 2
 если!% 5 ==! перейти начать
 установить fname =% dir% \% fname%
 команда / e: 1024 / c% 0} {pass0
 goto endcount
 : pass0
 для %% a in (0 1 2 3 4 5 6 7 8 9) вызовите% 0} {pass2 %% a
 goto endcount
 : pass2
 для %% b в (0 1 2 3 4 5 6 7 8 9) вызовите% 0} {pass3% 3 %% b
 goto endcount
 : pass3
 для %% c в (0 1 2 3 4 5 6 7 8 9) вызовите% 0} {pass4% 3% 4 %% c
 goto endcount
 : pass4
 установить счетчик =
 : loop1
 если "% 3" == "" перейти к выполнению
 REM - раскомментируйте следующую строку, чтобы включить подавление ведущих нулей
 REM if "% 3" == "0" if "% count%" == "" goto x1
 set count =% count %% 3
 : x1
 сдвиг
 goto loop1
 :сделано
 if "% count%" == "" goto endcount
 : код пользователя
 если существует% dir% \% prefix %% count%.% ext% goto userend
 если не существует% fname% exit
 echo Копирование% fname% в% dir% \% prefix %% count%.% ext%
 скопировать% fname%% dir% \% prefix %% count%.% ext%
 echo Удаление% fname%
 дель% fname%
 выход
 : userend
 если "% target%" == "% count%" выход
 : endcount
  

Обратите внимание, что переданный префикс может содержать путь и / или основание (относительно данного каталога) для самого нового имени. Эта версия ничего не делает, если целевой файл уже существует или если данный файл не существует.

Обратите внимание, что все эти программы числового переименования начинаются с 000 в качестве первого числа.код можно изменить так, чтобы он начинался с любого числа, создав переменную среды, содержащую начальный номер (с ведущими нулями, если вы их используете) и изменение раздела кода пользователя на этот

 
 : код пользователя
 если!% startnum% ==! goto cont
 если!% startnum% ==! запустить goto cont
 если нет!% startnum% ==!% count% goto userend
 установить startnum = запустить
 : cont
 если существует% dir% \% prefix %% count%.% ext% goto userend
 если не существует% fname% exit
 скопировать% fname%% dir% \% prefix %% count%.% ext%> nul
 дель% fname%
 выход
 : userend
  

Обратите внимание, что «> nul» был добавлен к команде копирования, и два объявления были удалены — эти модификации удаляют все экранные сообщения, кроме сообщений об ошибках.

Другое использование FOR — счетчик циклов:

 
 для %% a в (!!!!!!!!!!) сделайте что-нибудь
  
делает все, что вы ему скажете, десять раз, по одному разу для каждого символа взрыва в установленный.

Более сложный счетчик взрыва, который принимает числовой аргумент (0-10),

 
 @ эхо выкл
 установить цель =
 если% 1! == 0! установить цель =
 если% 1! == 1! установить цель =!
 если% 1! == 2! установить цель = !!
 если% 1! == 3! установить цель = !!!
 если% 1! == 4! установить цель = !!!!
 если% 1! == 5! установить цель = !!!!!
 если% 1! == 6! установить цель = !!!!!!
 если% 1! == 7! установить цель = !!!!!!!
 если% 1! == 8! установить цель = !!!!!!!!
 если% 1! == 9! установить цель = !!!!!!!!!
 если% 1! == 10! установить цель = !!!!!!!!!!
 установить счетчик =
 сдвиг
 :петля
 если% count%! ==% target%! перейти к концу
 set count =% count%!
 Код пользователя REM находится здесь - закомментируйте или удалите следующую строку
 REM, если вы не хотите видеть процесс подсчета.эхо% количество%
 цикл goto
 :конец
  
Очевидно, что это можно использовать только для сравнительно небольших чисел, небольшого диапазона чисел. или небольшое количество непоследовательных чисел. Эти фрагменты (просто перевод code) иллюстрируют два последних использования:
 
 @ эхо выкл
 установить цель =
 если% 1! == 23! установить цель = !!!!!!!!!!!!!!!!!!!!!!!
 если% 1! == 24! установить цель = !!!!!!!!!!!!!!!!!!!!!!!!
 если% 1! == 25! установить цель = !!!!!!!!!!!!!!!!!!!!!!!!!
 если% 1! == 26! установить цель = !!!!!!!!!!!!!!!!!!!!!!!!!!
  
 
 @ эхо выкл
 установить цель =
 если% 1! == 1! установить цель =!
 если% 1! == 9! установить цель = !!!!!!!!!
 если% 1! == 23! установить цель = !!!!!!!!!!!!!!!!!!!!!!!
  

Существует также недокументированный синтаксис (полностью нарушенный в Win95 и NT), в котором ‘/’ перед символом нить.Этот синтаксис имеет любопытное свойство дважды вызывать предложение DO: один раз с символом, следующим за ‘/’, а второй раз с остальной частью Струна. Это удобно для удаления ведущих символов и для переформатирования струны. Следующий код удаляет первые четыре цифры из двенадцати цифр. Адрес Ethernet для создания восьмизначной строки для использования в качестве имени каталога:

 
 @ эхо выкл
 % 1% 2% 3% 4 REM Ожидается, что вы не поймете этот командный файл
 goto pass0
 : pass1
 для %% b в (/% SHRTNM%) вызовите% 0 goto pass2 %% b
 перейти к концу
 : pass2
 goto pass2% pxt%
 : pass2a
 установить pxt = b
 перейти к концу
 : pass2b
 установить pxt = a
 установить shrtnm =% 3
 перейти к концу
 : pass0
 установить pxt = a
 Код установки сети REM опущен - он генерирует значение STATION
 REM как адрес Ethernet
 установить shrtnm =% STATION%
 для %% a in (1 2 3 4) вызовите% 0 goto pass1
 установить pxt =
 REM дополнительный код пропущен
 :конец
  
Это отредактированная версия настоящего командного файла — комментарий в пользу пользователей, которым не хватает дел, чтобы занять себя, не возясь с файлы конфигурации и настройки машины.

Другие примеры использования ДЛЯ можно найти в этой книге, но есть интересное использование для переворачивания строки и добавления пробелов в раздел, посвященный сложению десятичных дробей .


GOTO
— это команда, которую нас учат избегать в структурированной программирование. Что ж, у нас действительно нет выбора в пакетном языке, поскольку если нам нужен структурированный код, мы должны писать структуры, используя GOTO . По сути, GOTO — это переход в командном файле.Здесь есть множество примеров по всему коду. Если цель ниже прыжок, COMMAND.COM нужно только прочитать и проанализировать строки между прыжком и цель, но если она выше прыжка, COMMAND.COM должен прочитать до конца, затем начать сначала. Для больших обратных переходов рекомендуется повторно вызвать командный файл и иметь вектор вверху для обработки фактического прыжка, что тогда является прыжком вперед:

 
 @ эхо выкл
 % 1% 2
 : label1
 REM некоторый код
 % 0 перейти к метке1
 REM больше кода
 :конец
  

Обратите внимание, что в качестве разделителя между «goto» и целевой ярлык.Это особенно полезно в конструкциях, включающих ДЛЯ :

 
 для %% a in (echo goto: end) do %% a Message
  
сначала отобразит сообщение, а затем перейдет к метке: end.

ЕСЛИ УРОВЕНЬ ОШИБКИ Обычно
используется для того, чтобы командный файл принял соответствующее действие, основанное на успехе или неудаче внешнего исполняемая программа, хотя в некоторых случаях ее можно использовать для выбора правильный код в зависимости от характера сбоя.

Единственный доступный тест для использования с ERRORLEVEL — это

  если errorlevel = & GT x  
test (и это отрицание, конечно). УРОВЕНЬ ОШИБКИ не может быть назначен переменной. Стандартные формы теста:
 
 если errorlevel 4 goto el4
 если errorlevel 3 перейти к el3
 если errorlevel 2 перейти к el2
 если errorlevel 1 got0 el1
  
Обратите внимание, что в первую очередь необходимо проверить наибольшее количество интересующих людей, потому что test возвращает истину для любого значения, равного или превышающего тестовое значение. Форма
 
 если нет errorlevel 4 goto nel4
  
выполняет тест & LT.
 
 если ошибка уровень 4, если нет ошибка уровень 5 получил el4
   
и аналогичные конструкции выполняют точный тест на равенство.

Особый случай вид программы, которая возвращает информацию, например, какой ключ был нажал, как УРОВЕНЬ ОШИБКИ.

 
 @ эхо выкл
 xcopy e: \ temp \ *. * c: \ temp \ / s
 если нет errorlevel 1 перейти к успеху
 echo Файлы для копирования не найдены или XCOPY не удалось
 перейти к концу
 :успех
  ... делайте все, что вам нужно, с копиями
 :конец
  
Обратите внимание, что если переключатель / a использовался с XCOPY, ERRORLEVEL 0 не обязательно будет означать, что он скопировал какие-либо файлы, только то, что некоторые файлы были найдены до проверки атрибута архива.

IF EXIST foo
разрешает выполнение команды при условии наличия названный файл. Спецификация файлов и / или команда могут быть переменными, но здесь мы обращаемся к жестко запрограммированному случаю.

 
 если существует foo del foo
  
— это обычное использование конструкции IF EXIST. Это позволяет избежать сообщения «Файл не найдено «сообщение об ошибке, если файл, указанный foo, не существует, попытка удалить файл, только если он действительно существует. Это часто используется, когда foo является шаблоном подстановки.Номер приведены варианты этой единственной конструкции условного выполнения в разделе «Примеры». Отрицание может также может использоваться для проверки того, что файл не существует, прежде чем что-то делать что требует этого условия:
 
 если не существует foo.bat скопируйте \ bin \ foo.bat
  

Команда в конструкции IF EXIST может быть CALL или GOTO , что разрешить что-то вроде вызовов процедур и функций. Пока первый пример генерировать синтаксические ошибки, если используется оператор отрицания, команды, которые не действуют на проверяемый файл, не действуют, и использование отрицание часто может упростить структуру.Вот пример из реального мира используется, но только в набросках: часто бывает необходимо определить, сработала ли какая-то внешняя утилита, но утилита не вернуть полезный УРОВЕНЬ ОШИБКИ — вывод команды может быть фильтруется через FIND, вывод FIND направляется в файл, а файл проверено на содержание, попытавшись скопировать его. Этот код определяет в файл TEST.DAT содержит фразу «быстрая коричневая лиса» (с использованием функция поиска без учета регистра символов FIND).

 
 @ эхо выкл
 установить ответ = фраза не найдена
 find / i тест "быстрая коричневая лисица".dat>} {. 1
 копия} {. 1} {. 2
 если не существует} {. 2 goto done
 del} {. 2
 установить ответ = фраза найдена
 :сделано
 del} {. 1
 эхо% ответ%
 установить ответ =
 :конец
  
Обратите внимание, что если бы оператор отрицания (НЕ) не использовался, он бы были необходимы для применения специальной обработки к удалению} {. 2, или использовать более сложную структуру с несколькими прыжками, скорее чем фактически использованная конструкция, как в этом примере
 
 @ эхо выкл
 find / i тест "быстрая коричневая лисица".dat>} {. 1
 копия} {. 1} {. 2
 если существует} {. 2 goto существует
 эхо фраза не найдена
 goto done
 :существуют
 эхо фраза найдена
 del} {. 2
 :сделано
 del} {. 1
 :конец
  

IF foo == bar
выполняет сравнение строк. Строки могут быть аргументами командной строки, переменными среды или строковыми литералами. Очень старый пример это программа RUN.BAT, которая объединяет несколько командных файлов в один и использует первый аргумент командной строки для вектора к необходимому коду для случая в руке.

 
 @ эхо выкл
 если "% 1" == "ed" перейти
 if "% 1" == "c" перейти к c
 echo ERROR: аргумент% 1 не может быть идентифицирован.
 перейти к концу
 : ed
  ... код для настройки, запуска и очистки после текстового редактора
 перейти к концу
 : c
  ... код для настройки, запуска и очистки после компилятора c и его IDE
 перейти к концу
 :конец
  
Обычно используется для управления потоком программы на основе переменных среды:
 
 if "% temp%" == "" перейти к novar
  
(Знаки «» позволяют сравнивать пустые строки, поскольку они становятся частью строка — если% temp% не был установлен на что-то, после нормализация и подстановка командным процессором.

Другой вариант — преобразовать аргумент (ы) во все заглавные буквы перед проводя сравнение — см .: «Примеры». Переменная команда синтаксис (который будет разработан позже) также может быть использован здесь.


MOVE имеет некоторые применения, которые не очевидны из его названия, но параллельно некоторые функции версии unix: она не только перемещает файлы, но и также переименовывает каталоги — но не перемещает каталогов. ДВИЖЕНИЕ занимает только одно переключатель: / y (или / -y, чтобы переопределить переключатель / y в переменной COPYCMD (как COPY, так и MOVE используют одну и ту же переменную, поэтому для них должны быть активны одни и те же переключатели)).Синтаксис:

 
 ПЕРЕМЕСТИТЬ [/ Г | / -Y] [диск:] [путь] dirname1 dirname2
  
(как указано в моем MS), но правильнее
 
 ПЕРЕМЕСТИТЬ [/ Г | / -Y] [диск:] [путь] имя каталога1 [диск:] [путь] имя каталога2
  
для переименования (но не перемещения) каталога — обратите внимание, что необязательные части синтаксис должен присутствовать как в исходной, так и в целевой спецификациях, если они используются в любой и должен быть одинаковым в обоих.
 
 ПЕРЕМЕСТИТЬ [/ Г | / -Y] [диск:] [путь] имя_файла1 [, ...] место назначения
  
Перемещает и / или переименовывает файл.»пункт назначения» может быть почти любым, что имеет смысл, но если место назначения не существует и похоже на имя файла, оно будет воспринято как имя файла в текущем каталоге — если файл находится в текущем каталоге результат такой же, как и у REN. Если файла нет в текущий каталог он будет перемещен туда. Если все указано и цель каталог существует, файл будет перемещен туда, даже на другой диск. MOVE — это внешняя команда (MOVE.EXE) и возвращает уровни ошибок: 0 для успеха и 1 для ошибки.Этот может иметь некоторые тонкие применения в пакетных файлах, но у меня не было времени исследовать последствия.

В HELP довольно много информации о MOVE, и большая часть ее верна (конечно) неполный.


Полезные вещи, которые вы можете сделать с PROMPT

Команда PROMPT делится на две категории: строки выдачи, содержащие трудноразрешимые символы Escape на консоль, и получить информацию для использования в командном файле (или в другом месте).В Первый чаще всего используется для отправки escape-последовательностей ANSI в ANSI.SYS (сменное консольное устройство). Это легко:
 
 @ эхо выкл
 установить oldprompt =% prompt%
 подсказка $ e [2J
 эхо на

 @ эхо выкл
 установить подсказку =% oldprompt%
 установить oldprompt =
 :конец
  
очищает экран. Последовательности Escape чаще используются для управления цвета и / или положение курсора — просто измените часть после «$ e [» ко всему, что вам нужно.

Поскольку мы хотим, чтобы измененная подсказка была активна только один раз, мы сохраняем старую строку, поворачиваем эхо, сгенерируйте чистую подсказку с пустой строкой, затем снова выключите эхо и восстановите исходная строка приглашения.

Использование подсказки для получения информации немного сложнее, так как мы должны перенаправить приглашение в файл, и это невозможно сделать, кроме как путем создания вторичный командный процессор и перенаправляет его вывод, что оставляет нам с проблемой возврата информации в программу:

 
 @ эхо выкл
 % 1% 2
 установить oldprompt =% prompt%
 подсказка% 0 goto pass2 $ d $ t
 command / c% 0 goto dummy>} {. bat
 установить подсказку =% oldprompt%
 установить oldprompt =
 } {
 перейти к концу
 : pass2
 установить штамп =% 4 /% 5
 перейти к концу
 :дурачок
 эхо на

 @ эхо выкл
 :конец
  
генерирует отметку даты / времени в формате 09-09-1995 / 19: 39: 05.29 (вы могли снимите только символы из того времени, которое вы хотели, с некоторыми из код обработки строк, найденный во многих примерах здесь и в других местах в этой книге. Обратите внимание, что% 3 не указывается на штампе: это название дня недели.

Здесь решается проблема возврата информации в пакетный файл. включив необходимые команды для повторного вызова командного файла и передачи его в правильный раздел кода в измененной строке приглашения и, следовательно, в пакетном файле, который подсказка перенаправлен на.Вызов COMMAND.COM с заданными аргументами приводит к его повторно вызвать командный файл и вектор в раздел, который снова включает эхо, генерирует приглашение с пустой строкой, затем отключает эхо и закрывается (что вызывает вторичный командный процессор также должен завершиться, что возвращает нас к строке, следующей за вызов командного процессора. C), — это когда измененная подсказка записывается в файл.C будет активен повсюду, а также с большой вероятностью возникнет.

Варианты на эту тему дают вам название дня от $ d до% 3, версии DOS из $ v и% 5, буква диска из $ n и% 3 или диск и путь с помощью $ p и% 3.

Я видел командный файл, который делает все это одновременно, помещая различные элементы в отдельные переменные среды (структура была полностью разные, довольно интересные, но не совсем в моем стиле).


Перенаправление и каналов — это операторы, а не команды.Они указать COMMAND.COM подключить ввод или вывод программ к файлам (перенаправление) или другие программы (трубы). Это работает, только если программа использует стандартный ввод и потоки вывода для его консольного ввода / вывода. Как правило, программы с красивыми экранами этого не делают. те, у кого грубые интерфейсы командной строки, делают. Большинство утилит DOS делают. Почти все фильтры делать (БОЛЬШЕ — это фильтр).

Трубы используют | Символ для подключения вывода одной программы или команды к ввод другого.Таким образом можно построить довольно длинные цепочки. Очень распространенное использование направить вывод команды или программы через FIND, чтобы удалить все, кроме требуется конкретная строка (строки).

Оператор перенаправления ввода — и LT , а перенаправление вывода операторы: и GT и и GT и GT . & LT подключает файл (или устройство) во входной поток программы, чтобы вы могли помещать ответы на запросы в файл и запускать программу автоматически.В наши дни перенаправление ввода используется редко, потому что немногие программы используют стандартный поток ввода (STDIN), и немногие пользователи понимают его преимущества. Чаще всего он используется в этой книге в методе LOADFIX / DATE. работы со списками. Перенаправление вывода используется чаще — оно полезно для размещение списков каталогов в файлы и для создания и заполнения файлов изнутри пакетные программы, используя команду ECHO и перенаправление для изменения места назначения ECHO в файл вместо консоли.& GT вызывает создание или усечение файла — несколько ECHO в один и тот же файл оставят файл только с последним в нем, в то время как & GT & GT заставляет все, что было перенаправлено, добавляться в конец файла. & GT & GT — это полезно для создания командных файлов из командных файлов: файл создается с помощью & GT перенаправление и оставшиеся строки ECHO используют & GT & GT, чтобы добавить строки в конец файл. & GT & GT также полезен для создания и добавления в файлы журнала:

 
 эхо.| дата | найти "Текущий" >> foo.log
 эхо. | время | найти "Текущий" >> foo.log
 эхо. >> foo.log
  
предполагает, что пользователь будет время от времени удалять или переименовывать файл — в противном случае он может вырасти, чтобы заполнить драйв. Он помещает только строку даты («Текущая дата …») и строка времени («Текущее время …»), за которой следует пустая строка в файле журнала. ЭХО. команда генерирует только & LTEnter & GT, который передается в DATE и TIME. команды для ответа на «Enter new… «подсказки, которые в противном случае остановили бы программу и подождите, пока пользователь нажмет & LTEnter & GT. Третье использование вызывает пустую строку добавляется в конец файла. Тот же эффект может быть достигнут, но медленнее, создав файл, содержащий только пустую строку, и перенаправив его на вход команд DATE и TIME и вводим его в целевой файл:
 
 дата> foo.log
 время> foo.log
 введите response.fil >> foo.log
  

Обратите внимание, что перенаправление вывода и каналы работают только со стандартным потоком вывода. (STDOUT) и стандартный входной поток (STDIN).

Есть много ошибок и тонкостей перенаправления и каналов: в сложных командах перенаправляется только вывод первой команды, и это часто что-то вроде «, если существует или ДЛЯ , у которого даже нет вывода в обычный смысл. Иногда этот эффект полезен, но чаще всего мешает. Один время, когда это очень полезно, — это когда желательно поставить общий вывод от пакетный файл в файл или через фильтр. В этом случае командный файл запускается от вторичного командного процессора, а его выходные данные перенаправляются или передаются по конвейеру.См. Раздел «Отладка командных файлов» и «Программа DIRX.BAT». для получения дополнительных объяснений и примеров. Последний работает с большинством ошибок, которые переадресация и трубы


REM
— маркер комментария (REMark). «::» работает лучше для чистых комментариев (это действительно дефектный ярлык и не обрабатывается в все), но на самом деле REM использует команду:

 
 @ эхо выкл
 REM> temp.tmp
 : эхо
  
имеет замечательное свойство создания файла нулевой длины с именем TEMP.ТМП, который может затем будет использоваться в тесте ЕСЛИ СУЩЕСТВУЕТ, где он будет проверяться как существующий, но на самом деле не потребляют дисковое пространство, только запись в каталоге. Любопытная вещь об использовании REM заключается в том, что что вы все равно можете включить строку комментария в примечание, не вводя ее в целевой файл.
 
 @ эхо выкл
 REM это тест> temp.tmp
 :конец
  
по-прежнему создает файл нулевой длины с именем TEMP.TMP.

Стандартный синтаксис: @ эхо выкл REM это комментарий :конец который не влияет на программу, кроме как замедляет ее немного больше, чем «::» синтаксис:

 
 @ эхо выкл
 :: это тоже комментарий, хоть и КОМАНДА.COM думает, что это дефектный ярлык
 :конец
  
Примечание: в группах новостей сообщалось, что ‘;’ также является маркером комментария — это неверно для MSDOS 6.22.

REN и RENAME — это варианты имен для одной и той же команды — команда для переименования файлов (но не каталогов — используйте для этого MOVE.

Использование и синтаксис просты, а их функциональность очень ограничена. Синтаксис:

 
 ПЕРЕИМЕНОВАТЬ [диск:] [путь] имя_файла1 имя_файла2
 REN [диск:] [путь] имя_файла1 имя_файла2
  
и эффект состоит в том, чтобы изменить только имя и / или расширение указанного файла (ов) — вы не можете изменить часть каталога в спецификации файла с помощью REN — вы даже не можете указать путь в целевом имени файла.Эта функция будет переименовывать файлы нулевой длины — это работает только с записью каталога и не заботится о том, что находится в файле.

С помощью этой команды мало что можно сделать, кроме как по назначению.

REN и RENAME являются внутренними функциями COMMAND.COM и поэтому не возвращают уровень ошибки.


SHIFT
имеет только одну функцию: перемещает окно доступности аргументов командной строки ближе к концу командный хвост. Единственные доступные аргументы — от% 0 до% 9.Изначально % 0 — это первое, что указывается в командной строке (имя программы), а аргументы от% 1 до% 9 — это следующие девять полей в командной строке (первые девять аргументов к программе). SHIFT перемещает это окно доступа на один позиция вправо (или, наоборот, аргументы на одну позицию влево) так что каждый аргумент ссылается на элемент, который был справа от него. Это используется в Decimal Addition для позиционирования десяти элементы в поисковой таблице, чтобы они совпадали с цифрами от 0 до 9 для индексов с [0] по [9].Этот командный файл (назовите его ZERO.BAT) иллюстрирует концепцию повторно вызывая себя со строкой аргументов и перемещаясь по ней (% 10 включен чтобы показать, что% 9 действительно является верхним пределом -% 10 преобразуется в% 1, за которым следует буквальный символ ‘0’):

 
 ZERO.BAT
  @ эхо выкл
  %вилка%
  установить fork = goto pass2
  % 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  : pass2
  эхо.
  эхо без сдвига:
  echo %% 0 =% 0 %% 1 =% 1 %% 2 =% 2 %% 3 =% 3 %% 4 =% 4
  эхо %% 5 =% 5 %% 6 =% 6 %% 7 =% 7 %% 8 =% 8 %% 9 =% 9
  эхо %% 10 =% 10
  эхо.сдвиг
  эхо Сдвинуто один раз:
  echo %% 0 =% 0 %% 1 =% 1 %% 2 =% 2 %% 3 =% 3 %% 4 =% 4
  эхо %% 5 =% 5 %% 6 =% 6 %% 7 =% 7 %% 8 =% 8 %% 9 =% 9
  эхо %% 10 =% 10
  эхо.
  сдвиг
  эхо Сдвиг дважды:
  echo %% 0 =% 0 %% 1 =% 1 %% 2 =% 2 %% 3 =% 3 %% 4 =% 4
  эхо %% 5 =% 5 %% 6 =% 6 %% 7 =% 7 %% 8 =% 8 %% 9 =% 9
  эхо %% 10 =% 10
  эхо.
  сдвиг
  эхо Сдвинуто три раза:
  echo %% 0 =% 0 %% 1 =% 1 %% 2 =% 2 %% 3 =% 3 %% 4 =% 4
  эхо %% 5 =% 5 %% 6 =% 6 %% 7 =% 7 %% 8 =% 8 %% 9 =% 9
  эхо %% 10 =% 10
  эхо.
  сдвиг
  сдвиг
  сдвиг
  сдвиг
  эхо Сдвинуто семь раз:
  echo %% 0 =% 0 %% 1 =% 1 %% 2 =% 2 %% 3 =% 3 %% 4 =% 4
  эхо %% 5 =% 5 %% 6 =% 6 %% 7 =% 7 %% 8 =% 8 %% 9 =% 9
  эхо %% 10 =% 10
  эхо.сдвиг
  сдвиг
  сдвиг
  сдвиг
  сдвиг
  эхо Сдвиг двенадцать раз:
  echo %% 0 =% 0 %% 1 =% 1 %% 2 =% 2 %% 3 =% 3 %% 4 =% 4
  эхо %% 5 =% 5 %% 6 =% 6 %% 7 =% 7 %% 8 =% 8 %% 9 =% 9
  эхо %% 10 =% 10
  эхо.
  установить вилку =
  :конец
  

Есть несколько других команд, которые редко используются вне пакетных файлов. Некоторые, такие поскольку LOADHIGH , SUBST , SETVER и т.п. являются командами настройки системы, и действительно не имеют места в обсуждении командных файлов как командных файлов, но принадлежат при обсуждении конфигурации системы — в этом трактате они будут проигнорированы.Там есть еще один, SET , который технически является внутренней командой COMMAND.COM, а не встроенная команда пакетного файла, здесь будет рассматриваться, потому что она редко используется из командной строки и необходим для работы большинства командных файлов.

SET
— это команда, которая помещает строку в именованную запись в окружающей среде. Более подробно это обсуждается в раздел, посвященный Переменным , и проиллюстрирован на протяжении всего трактата.

 ** Авторские права 1995, Тед Дэвис - все права защищены ** 

Мы приветствуем отзывы читателей. ПРИМЕЧАНИЕ : тема сообщения должна содержать слово «пакет», чтобы сообщение прошло фильтр спама.

Назад на страницу содержания

Вернуться на мою страницу личных ссылок — вернуться на мою домашнюю страницу

7 способов измерения времени, затрачиваемого на выполнение командного файла или командной строки • Raymond.CC

Возможность писать пакетные команды значительно поможет пользователю компьютера автоматизировать простые задачи без необходимости изучать язык программирования для написания специальной программы для него или даже устанавливать громоздкое программное обеспечение для разработки, такое как Microsoft Visual Studio.Все, что вам нужно сделать, это запустить Блокнот и начать писать команды, а затем сохранить его с расширением .bat, где операционная система Windows автоматически распознает, что это командный файл.

Запуск файла .bat мгновенно запускает выполнение нескольких команд по порядку, но иногда некоторые команды могут завершиться ошибкой, если они выполняются слишком близко друг к другу. Простое решение — измерить приблизительное количество времени, необходимое для полного выполнения команды, указав задержку между ними и продолжив переход к следующей строке.

Кроме того, получение времени выполнения для командной строки также можно использовать для целей тестирования. Некоторые примеры измеряют время, затрачиваемое на копирование файлов между компьютерами или жесткими дисками. Здесь у нас есть 7 различных методов, которые вы можете использовать для отслеживания времени выполнения команды.

1. ptime

ptime — это небольшой бесплатный инструмент, который был выпущен еще в 2002 году, но все еще отлично работает в Windows 8.1. Использовать ptime для измерения времени, необходимого для завершения выполнения команды, так же просто, как добавить команду после имени файла.В приведенном ниже примере команды измеряется количество времени, затрачиваемое на отображение всех файлов и папок с диска C: \.

ptime.exe dir C: \ / s

ptime утверждает, что измеренное время выполнения имеет точность до 5 миллисекунд или лучше.

Скачать ptime


2. TimeThis

Time Это официальный инструмент Microsoft из Windows 2000 Resource Kit. Time Это очень старая программа, выпущенная еще в 2000 году, но все еще отлично работающая в Windows 8.1. Исполняемый файл TimeThis.exe установлен в C: \ Program Files \ Resource Kit \, и установщик не задает путь, который позволяет запускать инструмент TimeThis.exe где угодно, поэтому убедитесь, что вы перешли в каталог Resource Kit. для запуска TimeThis.

TimeThis используется точно так же, как ptime. Просто добавьте команду после timethis, чтобы измерить время выполнения команды.

Download TimeThis


3. Таймер Gammadyne

Использование таймера Gammadyne немного отличается от первых двух инструментов, упомянутых выше.Он функционирует как таймер, при этом вызов программы в первый раз запустит таймер, а повторный запуск с переключателем / с остановит таймер и сообщит измеренное истекшее время. Ниже приведен пример командного файла, использующего таймер Gammadyne для подсчета времени, затраченного на выполнение тестового файла io.exe.

timer.exe
io.exe
timer.exe / s

Таймер Gammadyne показывает только децисекунды, а ptime и timethis — миллисекунды.

Загрузить Таймер Gammadyne


4. TimeMem

TimeMem — это гораздо более новое приложение, перенесенное из утилиты времени Unix. Вместо того, чтобы просто показывать общее время выполнения команды, он также предоставляет другую информацию, относящуюся к использованию памяти и статистике ввода-вывода, такую ​​как код выхода, время ядра, время пользователя, сбой страницы, рабочий набор, выгружаемый пул, невыгружаемый пул и страница размер файла.

TimeMem требует для запуска msvcr100.dll, файла библиотеки времени выполнения Microsoft C, иначе будет отображаться всплывающее окно с сообщением об ошибке «Программа не запускается из-за MSVCR100.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы решить эту проблему ». Если у вас нет файла, вы можете загрузить его отсюда и поместить его в то же место, что и TimeMem.

Загрузить TimeMem


5. PowerShell

PowerShell — это более продвинутая оболочка командной строки, которую вы можете найти встроенной в Windows, начиная с 7, поэтому нет необходимости использовать какие-либо сторонние инструменты для измерения время выполнить команду. Командлет Measure-Command может использоваться для измерения времени, необходимого для выполнения команды.

Measure-Command {. \ Io.exe}

Обратите внимание, что важно заключить команду, которую вы хотите измерить, в левую и правую фигурные скобки, иначе вы получите ошибку неверного аргумента.


6. Сверхточный командный таймер

Сверхточный командный таймер — старейший инструмент в этой категории, датируемый 1993 годом и созданный для измерения времени выполнения команд DOS. Запуск в Windows 8.1 предложит вам установить устаревший компонент NTVDM, потому что этот инструмент является 16-битным приложением, но он по-прежнему работает, но не в 64-битной операционной системе.

Вы будете удивлены, узнав, что этот старый инструмент — единственный, который может измерять до микросекунд!

Загрузить сверхточный командный таймер


7. % TIME%

Некоторые люди забыли бы, что вы можете напечатать текущее время и дату в командной строке или DOS с% TIME% и% DATE%.Этот метод будет работать аналогично Gammadyne Timer, распечатывая текущее время до и после выполнения команды и сохраняя время во внешнем файле timer.txt.

ECHO Start Measure% Time% >> timer.txt
ВАША КОМАНДА
ECHO Stop Measure% Time% >> timer.txt

Единственная проблема заключается в том, что вам нужно вручную вычислить разницу во времени между двумя значениями с помощью таймера .txt, чтобы узнать общее время выполнения команды.

Почему некоторые команды сценария WinSCP, указанные в пакетном файле, не выполняются / не работают? :: WinSCP

Смешивание команд WinSCP и cmd

Распространенное заблуждение состоит в том, что в пакетный файл можно вставлять команды, как если бы вы вводили их в окне консоли.Итак, после строки, которая выполняет winscp.com , вы можете добавить команды сценария WinSCP. Но это невозможно. Пакетный файл может содержать только команды, которые можно выполнить в командной строке Windows — cmd.exe . Вы не можете напрямую использовать подкоманды этих команд (например, команды сценария WinSCP).

Например, этот командный файл:

 echo Запуск WinSCP
winscp.com /log=winscp.log / ini = nul
откройте sftp: // user: [email protected]/
поместите d: \ examplefile.txt
выход
echo WinSCP завершено 

Он выполнит winscp.com , войдя в интерактивную подсказку сценария WinSCP. Теперь WinSCP будет ждать , когда вы введете свои команды (WinSCP не знает о пакетном файле). С другой стороны, cmd.exe (который интерпретирует пакетный файл) ожидает закрытия winscp.com , прежде чем он даже проверит следующие строки пакетного файла. Только после того, как вы закроете winscp.com (например, набрав команду WinSCP exit ), cmd.exe прочитает строку с командой open cmd.exe не выполнит его, так как он не знает никакой команды open .

Для выполнения команд WinSCP в пакетном файле необходимо использовать переключатели / script или / command .

  • С переключателем / script вам необходимо переместить команды WinSCP в отдельный текстовый файл, например script.txt :
     открыть sftp: // user: [email protected]/
    поместите d: \ examplefile.txt
    выход 
    И выполните его из командного файла, например:
     echo Запуск WinSCP
    winscp. должен быть самым последним символом в строке (без пробелов после него), а следующая строка должна иметь отступ (как минимум один пробел впереди).
     

    Двойные двойные кавычки

    При использовании переключателя / command каждая команда сценария должна быть заключена в двойные кавычки. Поскольку параметры самих команд могут потребоваться заключить в двойные кавычки, их необходимо удвоить.

    Дополнительные сведения см. В разделе «Как избежать двойных кавычек в команде путем их удвоения».

    Знак процента

    Если ваша командная строка WinSCP содержит знак процента, например, для кодирования специальных символов в URL-адресе сеанса (особенно в учетных данных), это может конфликтовать со специальным значением знака процента в пакетных файлах Windows.

    Чтобы избежать этого, нужно удвоить знак процента.

    Например, в следующем пакетном файле имя пользователя user @ domain содержит знак @ . Поскольку знак @ имеет особое значение в сеансе URL , его необходимо закодировать как % 40 ."выход"

    полезных примеров пакетных файлов — Learn / Windows Shell

    На этой странице представлены примеры полезных пакетных файлов и фрагментов кода, которые можно использовать в пакетных файлах.


    Определить папку, в которой существует командный файл

    Пакетным файлам часто необходимо знать расположение файлов ввода и вывода. Это может быть осложнено тем, как запускается командный файл, например, указав имя в текущей папке, используя абсолютный или относительный путь к другой папке, или быть найденным в переменной среды PATH .

    Один из вариантов — потребовать, чтобы командный файл запускался из определенной папки, например, расположение командного файла. Однако это снижает гибкость. Чтобы разрешить запуск командного файла из любой папки, необходимо определить абсолютное расположение скрипта, чтобы ввод и вывод можно указать относительно этого местоположения. В следующем примере определяется абсолютный путь к запускаемому пакетному файлу:

      @ эхо выкл.
    rem Echo, показывающий, как получить папку с пакетным файлом и его родительскую папку.rem Определите папку, в которой существует этот командный файл:
    rem - используется для указания пути относительно местоположения командного файла
    установить scriptFolder =% ~ dp0
    rem Удалить завершающий \ из scriptFolder
    установить scriptFolder =% scriptFolder: ~ 0, -1%
    rem Также получить имя скрипта без начального пути.
    установить scriptName =% ~ nx0
    
    rem Получите родительскую папку, которая является папкой для полной установки программного обеспечения.
    rem Необходимо получить родительскую папку, используя подход Windows for loop.
    для %% i в (% scriptFolder%) установите installFolder = %% ~ dpi
    rem Удалить конечный \ из installFolder
    установить installFolder =% installFolder: ~ 0, -1%
    
    echo scriptFolder =% scriptFolder%
    echo installFolder =% installFolder%
    
    выход / б 0
      
    • Подстроки обрабатываются с использованием операторов : ~ .См. Документацию по обработке строк.
    • Имена файлов и папок обрабатываются с использованием операторов % ~ . См. Документацию по тильде процента.
    • Оператор для используется для определения родительской папки для папки сценария. потому что нет эквивалента команде Linux dirname . Обратите внимание, что для переменной индекса цикла i в %% i должно соответствовать символу в конце строки ( ~ dpi).
    • Будьте осторожны при повторном использовании переменных в для циклов и убедитесь, что задержка расширения не является проблемой для всего командного файла.Если значения переменных не соответствуют ожидаемым, может потребоваться setlocal EnableDelayedExpansion . См. Документацию по setlocal .

    Параметры командной строки синтаксического анализа

    Распространенной задачей при написании командного файла является анализ параметров командной строки. Параметры могут принимать различные формы, включая:

    • -a или / a — односимвольный вариант
    • -a xyz — односимвольный вариант с аргументом
    • -abc — длинный вариант с одинарным тире
    • -abc xyz — длинный вариант с одинарным тире с аргументом
    • --aabc — длинный вариант с несколькими тире
    • --aabc xyz — длинный вариант с несколькими дефисами с аргументом
    • --aabc = xyz — длинный вариант с несколькими дефисами и присваиванием с использованием знака равенства

    Программы Windows традиционно использовали косую черту (/) для обозначения параметров команд.Однако это конфликтует с путями, подобными Linux ( / folder1 / folder2 / file ). Часто используется синтаксис тире в стиле Linux, а не косая черта, особенно если программное обеспечение предназначено для Linux.

    Можно использовать оператор для для циклического перебора параметров команды, и пример будет будет добавлен здесь в будущем. Однако для простых программ, которые ожидают указания только одного или двух параметров команды, использование подхода грубой силы работает. Например:

      @ эхо выкл.
    rem Пример, показывающий синтаксический анализ командной строки методом перебора.if "% 1%" == "/ h" перейти к printUsage
    if "% 2%" == "/ h" перейти к printUsage
    if "% 1%" == "- h" goto printUsage
    if "% 2%" == "- h" goto printUsage
    если "% 1%" == "/?" перейти к печати
    если "% 2%" == "/?" перейти к печати
    
    : printUsage
    rem
    echo Распечатайте здесь использование
    goto exit0
    
    : exit0
    rem Выход из командного файла с кодом 0
    выход / б 0
      
    • Приведенный выше командный файл ожидает от нуля до двух параметров. Поэтому проверяются параметры команды % 1% и % 2% .
    • A : этикетка printUsage и перейти используются для перехода к желаемому коду.

    Запуск программы Cygwin из командного файла

    Может быть сложно реализовать требуемые функции в пакетном файле Windows. Сценарий оболочки Cygwin может облегчить выполнение задачи. В следующем примере показано, как вызвать сценарий Cygwin из командного файла.

      установить gpTempFile =% TMP% \ sometempfile.tmp
    C: \ cygwin64 \ bin \ bash --login -c "echo HOME = $ HOME"
    C: \ cygwin64 \ bin \ bash --login -c "echo USER = $ USER"
    C: \ cygwin64 \ bin \ bash --login -c "echo $ (pwd)"
    rem Перенаправить вывод программы Cygwin во временный файл
    C: \ cygwin64 \ bin \ bash --login -c "путь / к / программе">% gpTempFile%
    rem Прочитать временный файл в 'gpVersion'
    set / p gpVersion = <% gpTempFile%
      
    • Предполагается место установки Cygwin по умолчанию (во избежание проблем рекомендуется использовать расположение по умолчанию)
    • Важно знать место, где открывается оболочка Cygwin, а также значение важных переменные окружения, которые повлияют на поведение вызываемой программы Cygwin.Приведенные выше эхо-утверждения помогают понять окружающую среду.
    • Чтобы найти программу на Cygwin, она должна быть в пути, указанном как абсолютный путь, либо указывать относительно места запуска программы.
    • Windows не позволяет назначать вывод программы переменной. Использование временного файла - один из способов преодолеть это ограничение.

    Установить заголовок окна командной строки

    Может быть полезно установить заголовок окна командной строки, например, чтобы указать, что инструмент командной строки настроен для среды.Например, сценарий может быть запущен для настройки PATH и других переменных среды. необходимо для запуска программного обеспечения в окне командной строки. Название команда используется для установки заголовка, например:

      @ эхо выкл.
    rem Пример установки заголовка окна командной строки
    
    rem Настроить среду для программного инструмента
    установить ENV_VAR1 = некоторое значение
    установить ENV_VAR2 = некоторое значение
    
    rem Задайте заголовок, чтобы указать, что окно командной строки настроено для программного обеспечения ABC.title Окно командной оболочки для программного обеспечения ABC
    
    выход / б 0
      
    • Текст после заголовка не следует заключать в двойные кавычки
    • Заголовок можно изменить несколько раз, многократно используя команду title
    .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *