Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как сделать русский язык в bat файле


Как в CMD сменить кодировку? Русский текст в CMD

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

Рассмотрим пример: когда нужно вывести в консоль Русский текст, скажем «Примет мир». Для этого создадим Bat файл с именем «1.bat». Используйте для этого обычный Блокнот Windows (Notepad.exe) Запишем в него  следующие строки!

@Echo off echo. echo ПРИВЕТ МИР echo. Pause

@Echo off

 

  echo.

     echo ПРИВЕТ МИР

    echo.

Pause

Для тех, кто не понял или не в курсе, строчки «echo.» я добавил специально, что бы были отступы, от строки «Примет мир»

Теперь запускаем файл 1.bat и результат будет такого вида.

Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.

Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!

Решения проблемы с кодировкой в CMD. 1 Способ.

Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).

Скачиваем и устанавливаем на свой компьютер «Notepad++».

После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.

@Echo off echo. echo ПРИВЕТ МИР echo. Pause

@Echo off

 

  echo.

     echo ПРИВЕТ МИР

    echo.

Pause

Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»

и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.

Как видим, текст на Русском в CMD отобразился, как положено.

Решения проблемы с кодировкой в CMD. 2 Способ.

Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.

Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».

Задача: Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.

@Echo off Help > C:\HelpCMD.txt Pause

@Echo off

 

Help > C:\HelpCMD.txt

Pause

После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:

Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.

Теперь содержимое кода будет такое.

@Echo off chcp 1251 >nul Help > C:\HelpCMD.txt Pause

@Echo off

chcp 1251 >nul

 

Help > C:\HelpCMD.txt

 

Pause

После выполнения «Батника» результат будет такой:

Вот так на много лучше, правда?

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

Дополнительно из комментариев то Garric

Автор очень хорошо описал принцип. ! Но это неудобно.
Нужно бы добавить. Если автор добавит это в статью то это будет Good.
Создаём файл .reg следующего содержания:
——
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.bat\ShellNew]
«FileName»=»BATНастроенная кодировка.bat»
——
Выполняем.
——
Топаем в %SystemRoot%\SHELLNEW
Создаём там файл «BATНастроенная кодировка.bat»
Открываем в Notepad++
Вводим любой текст. (нужно!) Сохраняемся.
Удаляем текст. Меняем кодировку как сказано в статье. Сохраняемся.
———-
Щёлкаем правой кнопкой мыши по Рабочему столу. Нажимаем «Создать» — «Пакетный файл Windows».
Переименовываем. Открываем в Notepad++. Пишем батник.
В дальнейшем при работе с файлом не нажимаем ничего кроме как просто «Сохранить». Никаких «Сохранить как».

Русские имена папок и файлов в BAT файлах » Познавательный блог

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

С 7 виндой проблем не возникло, скрипт накатал за 5 минут, а вот с XP и русскими именами папок возникли сложности. Он не принимал пути, которые я ему давал в русской раскладке.

Решение было найдено на просторах сети.

Во-первых, писать длинные имена в кавычках, а потом есть два варианта:

1. Редактировать bat-файл в ДОС.
2. Вставить в начала батника команду chcp 1251

Вот код для добавления в автозагрузку
copy /y auto.exe C:\Users\user\AppData\Roaming\Microsoft\Windows\Startm~1\Programs\Startup
copy /y auto.exe C:\Users\user_2\AppData\Roaming\Microsoft\Windows\Startm~1\Programs\Startup
copy /y auto.exe C:\Users\administrator\AppData\Roaming\Microsoft\Windows\Startm~1\Programs\Startup
chcp 1251
copy /y auto.exe "C:\Docume~1\Alluse~1\Главно~1\Программы\Автозагрузка"
copy /y auto.exe "C:\Docume~1\Admin\Главное меню\Программы\Автозагрузка"
copy /y auto.exe "C:\Docume~1\Администратор\Главное меню\Программы\Автозагрузка"
copy /y auto.exe "C:\Docume~1\User\Главное меню\Программы\Автозагрузка"

В итоге данный скрипт заработал на всех ОС.

Что такое командный файл | BeginPC.ru

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

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

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

Создать новый пакетный файл можно в текстовом редакторе, например в «Блокноте». Главное сохранить его с расширением .bat или .cmd. Команды используются точно те же, что и в командной строке Windows. Каждая новая команда пишется с новой строки. Имеется возможность использовать переменные, условия и переходы к определенному месту в командном файле для создания сложных сценариев.

Например, следующий код создает новую папку с именем текущей даты на системном диске компьютера и экспортирует из реестра Windows куст HKEY_CURRENT_USER\Software в файл с именем backup.reg.

MD %SYSTEMDRIVE%\%date%
 reg export "HKEY_CURRENT_USER\Software" "%SYSTEMDRIVE%\%date%\backup.reg" /y

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

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

Кириллица в BAT файле

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

Мы уже затрагивали кодировки, когда рассматривали единицы измерения объема информации. Суть проблемы заключается в том, что в командная строка использует кодировку DOS (codepage 866), а в самой операционной системе используется кодировка Windows (codepage 1251). Поэтому, когда вы запускаете такой батник, консоль не может правильно понять русские буквы и выдает ошибку. Это все равно, что если вы бы получили письмо на китайском языке. Это касается не только русского языка, но и любого другого, где используются не латинские символы.

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

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

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

Вообще возможности Notepad.exe очень ограниченны и если вы собираетесь серьезно заняться программированием на любом языке или вам мало возможности просто набрать несколько строчек текста, то рекомендуем обратить внимание на альтернативные текстовые редакторы, например Notepad++ или AkelPad.

В качестве примера рассмотрим сохранение файла в кодировке DOS с помощью Notepad++. Переходите в меню программы по пути «Кодировки» ⇒ «Кодировки» ⇒ «Кириллица» ⇒ «OEM 866», как на изображении ниже.

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

Что делать, если альтернативного редактора нет, и вы по каким-то причинам не хотите или не можете его установить. Можно вспомнить, что во всех Windows помимо стандартного Блокнота присутствует еще WordPad, который тоже может сохранять в кодировке DOS. Запустить его можно нажав комбинацию клавиш WIN+R и ввести «WordPad» и кнопку OK или «Пуск» ⇒ «Стандартные» ⇒ «WordPad». Просто набираете ваш код и нажимаете «Сохранить», в поле «Тип файла» выбрав «Текстовый документ MS-DOS». Затем меняете расширение получившего файла с .txt на .bat.

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

Все о BAT файлах

Все о BAT файлах

   Пакетные или batch файлы это обычные текстовые файлы, содержащие наборы команд интерпритатора и имеющие расширение bat или cmd (cmd работают только в ОС семейства NT). Редактировать такие файлы можно при помощи блокнота или любого другого текстового редактора.
В этом FAQ собраны рекомендации, которые были протестированы на Windows 2000. Некоторые команды и переменные, использованные при написании примеров, отсутствуют в 9х.

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

Откройте блокнот и наберите две следующих строки:

@echo This batch file
@pause

Выберите Файл - Сохранить как, выберите Тип файла - Все файлы, в поле Имя файла введите 1.bat и сохраните его в корне диска С, например. Теперь откройте диск С и запустите файл 1.bat. На экран будет выведено две строки.

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

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


Команды, используемые в bat файлах 
 
Список команд, которые можно использовать в bat файлах, можно просмотреть, введя в командной строке (Пуск - Выполнить - cmd для Windows семейтва NT или Пуск - Выполнить - command для линейки 9х) команду

help

Результат работы help - список доступных команд с краткими пояснениями к ним. Чтобы получить более подробную информацию по интересующей команде введите в командной строке help имя_команды. Например, чтобы получить подробную справку по ключам команды AT выполните следующую команду:

help AT

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

start имя_файла.txt

Результатом выполнения этой команды станет открытие файла имя_файла.txt, а сам bat файл завершит свою работу. Такой способ хорош, если лог-файл небольшого размера, иначе Блокнот откажется его открывать, предложив использовать WordPad. Но эта проблема так же решаема, что и будет показано в дальнейших примерах.


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


Как создать файл с произвольным именем из bat файла 
 
Для создания файла в процессе выполнения пакетного файла используется символ перенаправления. Он выглядит так:

>

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

@echo Start file>C:\1.txt

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

set datetemp=%date:~-10%
@echo .>%SYSTEMDRIVE%\%DATETEMP%.txt

Эти две строки работают следующим образом. Сначала в памяти создаем переменную datetemp, которой присваиваем 10 символов справа налево от системной переменной DATE. Таким образом, теперь во временной переменной datetemp содержится только текущая дата. Следующией строкой перенаправляем вывод символа точка в файл, имя которого берем из переменной datetemp, а расширение txt указываем явно. Файл будет создан на системном диске компьютера, где выполняется bat файл.
При сборе администратором информации о компьютерах в сети будет удобнее добавить к имени файла имя компьютера. Это легко можно сделать при помощи следующей команды:

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

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


Как создать папку из bat файла 
 
Для создания папки используется команда MKDIR или ее сокращенный аналог MD. Для создания папки из bat файла нужно использовать следующую команду:

MD FolderName

После выполнения такой команды будет создана папка FolderName в папке, откуда запущен bat файл. Чтобы создать файл в отличном от запуска bat файла месте, например в корне диска D, используйте явное указание расположения новой папки. Команда будет выглядеть так: 

MD D:\FolderName

При создании папок можно пользоваться системными переменными. Например, можно создать в корне диска D папку с именем текущего пользователя. Для этого понадобится переменная %USERNAME%, а команда будет выглядеть следующим образом:

MD D:\%USERNAME%

Можно еще более усложнить команду и создать папку с именем текущего пользователя на системном диске его компьютера. Команда для этого будет выглядеть так:

MD %SYSTEMDRIVE%\%USERNAME%

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

set datetemp=%date:~-10%
MD %SYSTEMDRIVE%\%datetemp%

Эта конструкция работает следующим образом.
Первая команда создает в памяти переменную datetemp, которая будет уничтожена по окончании работы bat файла. То тех пор, пока bat файл не закончил свою работу есть возможность оперировать со значением этой переменной. Переменной datetemp присваивается 10 символов справа налево от системной переменной DATE, т.е. от текущей даты. Переменная DATE имеет формат Дн ДД.ММ.ГГГГ. Первые символы слева - имя дня недели и поэтому мы их отбрасываем и присваиваем временной переменной datetemp только текущую дату.
Этим не ограничивается список возможностей при создании папок. Вы можете опрерировать переменными так, как удобно Вам, создавая папки с уникальными, легко читаемыми названиями. Получить список всех переменных можно при помощи команды SET.


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

Часто, при выполнении сложного bat файла в автоматическом режиме проверить результаты его работы бывает затруднительно по многим причинам. Поэтому проще записывать результаты работы команд batch файла в текстовый файл (лог-файл). а потом анализировать правильность работы bat файла по этому логу.
Перенаправить результат работы команд bat файла в лог-файл достаточно просто. Далее будет показано, как это можно сделать.
Создайте 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.txt с корне диска С. Файл создается для примера. Эта команда записывает в файл C:\test.txt слово test
Пятая строка выводит в лог-файл пояснение, что следующая команда выполняет копирование файла из одного места в другое.
Команда в шестой строке копирует созданный файл C:\test.txt в файл C:\Old_test.txt, т.е. создается копия файла под новым именем.
Последняя, седьмая строка содержит команду вывода времени завершения работы пакетного файла. В сумме с записью в лог-файл времени начала работы пакетного файла эти два значения времени дают возможность оценить время работы пакетного файла.

Сохраните этот пакетный файл под именем, например, 1.bat
Предположим, что отчет о работе пакетного файла мы бы хотели хранить в отдельной папке и каждый день записывать отчет с новым именем файла, чтобы была возможность в любой из дней обратиться к логам за предыдущие дни. Причем, имя лог-фала хотелось бы иметь в виде даты работы пакетного файла. Чтобы все это реализовать создадим на диске С (например) папку с именем LOG, т.е. полный путь к ней будет выглядеть C:\LOG. Созданный пакетный файл 1.bat будем запускать следующей командой:

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

Если пакетный файл будет запускаться из Планировщика, то нужно указать полный путь с bat-файлу. Помните, что если в пути есть пробелы, то надо использовать либо кавычки, либо формат 8.3. Т.е., если путь к bat-файлу C:\Program Files\1.bat, например, то в командной строке Планировщика для запуска bat-файла нужно указать одну из следующих строк:

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

После запуска файла 1.bat в папке C:\LOG будет создан файл с именем, равным дате запуска bat-файла, например, 13.01.2004.txt Это и будет отчет о работе пакетного файла 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 (соответствующие теги могут быть выведены в лог-файл так, как выводились комментарии в примере 1.bat) и скопировать его на корпоративный сервер.


Как автоматически ответить на запрос о подтверждении 
 
Некоторые команды при выполнении требуют подтверждения потенциально опасного действия. Например, такие команды как format или del предварительно запросят подтверждения на дальнейшее выполнение. Если одна из этих команд выполняется в пакетном файле, то запрос на подтверждение остановит выполнение пакетного файла и он будет ожидать от пользователя выбора одного из предложенных вариантов. Причем, если результат выполнение пакетного файла перенаправлен в лог-файл, то пользователь не увидит запроса на подтверждение и batch файл будет выглядеть зависшим.
Для исправления таких неприятностей можно перенаправить нужный ответ в команду. Т.е. выполнить обратное действие для перенаправления вывода результатов работы команды в файл.
Посмотрим на примере как выглядит запрос на подтверждение потенциально опасного действия. Создадим на диске С, например, папку Folder. Создадим в ней или скопируем в нее два любых файла. Далее, откроем командную строку и выполним следующую команду:

del C:\Folder

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

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

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

|

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

echo Y|del C:\Folder

На экране будет показан запрос на подтверждение удаления всех файлов в папке Folder, но уже с положительным ответом (Y). Все файлы из папки Folder будут удалены.
Будьте осторожны с этой командой.


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

echo Testing

Эта команда выведет на экран команду echo Testing, а на следующую строку - результат ее работы, слово Testing.

@echo Testing

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

@echo off

Эта команда отключит вывод команд на экран на протяжении выполнения всего пакетного файла. Чтобы сама команда не выводилась, она начинается с символа @.


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

call 2.bat

Второй с именем 2.bat и также содержащий одну команду

pause

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

start 2.bat

и запустим файл 1.bat Теперь открылось окно, в котором для продолжения надо нажать любую кнопку, а окно основного пакетного файла (1.bat) отработав закрылось.
Таким образом, для вызова из одного пакетного файла другого, без остановки работы первого пакетного файла, нужно применять команду start.
Рассмотренные команды start и call могут использоваться не только для запуска других пакетных файлов, но и для запуска любых приложений или открытия файлов.
Например, команда start log.txt, находящаяся в теле пакетного файла, откроет файл log.txt в Notepad без остановки работы пакетного файла.


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

net send name Message text

Где name имя машины или пользователя, которому адресуется сообщение, а Message text - текст сообщения. После выполнения этой команды пользователю name будет отправлено сообщение.
Обратите внимание на то, что при использовании в тексте сообщения кириллицы текст должен быть набран в кодировке MS-DOS (866 кодовая страница). Иначе сообщение придет в виде нечитаемых символов. Набрать текст в кодировке DOS можно при помощи любого текстового редактора, поддерживающего эту кодировку. Это может быть, например, FAR. Откройте в FAR пакетный файл на редактирование (F4) и нажмите кнопку F8. В верхней строке редактора должна быть указана кодировка DOS, а снизу, у подсказки о быстрых клавишах, у клавиши F8 должна быть надпись Win, говорящая о том, что текущая кодировка DOS и для переключения в кодировку Win надо нажать F8.


Как автоматизировать удаление файлов по типу 
 
Чтобы очистить диск от временных файлов можно использовать команду

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

Где
/f - удаляет все файлы, даже если у них установлен атрибут только чтение
/s - удаляет файлы из всех подкаталогов
/q - отключает запрос на подтверждение удаления файла
C: - диск, на котором будут найдены и удалены файлы. Можно указать не весь диск, а папку, например, C:\WinNT
*.tmp - тип файлов, которые будут удалены
Будьте аккуратны с ключем /q и типами удаляемых файлов. Команда удаляет, не спрашивая разрешения и при указании неправильного типа файлов может удалить лишнего.


Как изменить IP адрес компьютера из пакетного файла 
 
IP адрес можно изменить при помощи команды netsh.
Чтобы правильно сменить IP адрес, сначала надо выяснить текущую конфигурацию. Сделать это можно в командной строке при помощи команды

netsh interface ip show address

Результат работы этой команды - отображение текущей конфигурации сетевого интерфейса. Нас интересует название интерфейса. Предположим, что он называется FASTNET.
Предположим, что нужно сменить IP адрес на 192.168.1.42, адресация в сети статическая, без использования DHCP, шлюз 192.168.1.1, маска 255.255.255.0 В этом случае, команда, которая должна быть выполнена из пакетного файла будет выглядеть следующим образом:

netsh interface ip set address name="FASTNET" static 192.168.1.42 255.255.255.0 192.169.1.1 1

После выполнения этой команды у интерфейса FASTNET IP адрес сменится на 192.168.1.42.
Команда netsh предоставляет широкие возможности по управлению сетевыми настройками из командной строки. Для ознакомления с другими ее функциональными возможностями пользуйтесь справкой при помощи netsh /?


Как узнать имя компьютера из bat файла 
 
Чтобы узнать имя компьютера при выполнении bat файла (чтобы использовать это значение в дальнейшем) используйте команду

hostname

Эта команда возвращает имя компьютера, на котором она запущена.


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

for /f "tokens=*" %%a in ('dir /b PATH\*.*') do ren PATH\%%a Prefix%%a

В этой строке надо заменить PATH\ на путь к файлам, которые будут переименованы, а Prefix на те символы, которые будут добавлены к имени файла при переименовании.
Не помещайте пакетный файл в папку, где происходит переименование, иначе он будет переименован тоже. Если в папке, где происходит переименование файлов есть подпапки, то к имени подпапки также будет добавлен префикс, т.е. подпапки будут переименованы как и файлы.
Если указать определенную маску для типов файлов, которые подлежат переименованию, например, *.txt, а не *.* как в примере, то будут переименованы файлы только указанных типов. Другие файлы и папки переименовываться не будут.

Второй вариант:

set thePATH=C:\test
for %%I in (*.txt) do ren "%thePATH%\%%~nxI" "%%~nI.dat"


Как использовать в пакетном файле символ процент 

Чтобы использовать символ процент (%) в пакетном файле его надо написать дважды. Например

echo 50%%

Эта команда в bat-файле выведет на экран 50%. Если же использовать команду echo 50%, то на экран будет выведено только число 50.
Учитывайте эту особенность при использовании символа % в написании пакетных файлов.


Как из пакетного файла сделать экспорт реестра 

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

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

Данная команда при выполнении пакетного файла выгрузит ветку HKEY_CURRENT_USER\Environment в файл C:\environment.reg Когда потребуется восстановить значения параметров в HKEY_CURRENT_USER\Environment, будет достаточно запустить файл environment.reg. Эту команду можно использовать для ежедневного бэкапа настроек программного обеспечения и системы, которые хранятся в реестре.
Не забывайте, что если в пути, по которому должен быть сохранен выходной файл или в имени ветки реестра есть пробел, то их необходимо заключить в кавычки.


Как из пакетного файла импортировать значения переменных реестра 

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

regedit.exe -s C:\environment.reg

Эта команда импортирует в реестр данные из файла environment.reg без запросов на подтверждение за счет использования ключа -s.


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

set tempdate=%date:~-10%
date 01-01-04
notepad.exe
date %tempdate%

В данном примере текущая системная дата сначала сохраняется в переменной, затем (во второй строке) системная дата устанавливается на 1-е января 2004 года, а потом вызывается программа, которая проверяет системную дату. В данном примере это Блокнот. До тех пор, пока открыт Блокнот, пакетный файл находится в ожидании, не завершаясь и не переводя системную дату обратно. Как только Блокнот будет закрыт, пакетный файл продолжит свое выполнение и установит системную дату на сохраненное в переменной tempdate значение, т.е. на то, которое было до запуска пакетного файла.
Не забывайте, что если путь до файла, которым запускается программа, содержит пробелы, то его (путь) необходимо заключить в кавычки. Если путь содержит кириллицу, то при написании пакетного файла необходимо использовать текстовый редактор, поддерживающий кодировку DOS (например, FAR). В противном случае, при запуске пакетного файла будет выведено сообщение о том, что "указанный файл не является внутренней или внешней коммандой...".
Если программа проверяет текущую системную дату только при своем запуске и во время работы больше этого не делает, то пакетный файл можно модифицировать, добавив перед именем исполняемого файла программы оператор start, т.е. наш пример будет выглядеть так:

set tempdate=%date:~-10%
date 01-01-04
start notepad.exe
date %tempdate%

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


Как в bat файле дождаться появления определенного файла 
 
Иногда необходимо при появлении определенного файла в папке выполнить какое-то действие. Чтобы организовать проверку появления файла в папке можно использовать следующий пакетный файл

:test
if exist c:\1.txt goto go
sleep 10
goto test
:go
notepad

Такой пакетный файл будет проверять с интервалом 10 секунд наличие в корне диска С файла 1.txt и когда файл 1.txt появится, будет выполнено действие, указанное после метки go, т.е. в этом примере будет запущен Блокнот.
Утилита sleep свободно распространяется в составе Resource Kit. Вы можете её скачать здесь.
Если файл 1.txt большого размера и копируется откуда-то, то может получится так, что пакетный файл проверит его наличие в то время, как файл еще не скопировался или занят другим приложением. В таком случае, попытка выполнить какие-то действия с файлом 1.txt приведет к ошибке. Чтобы этого не произошло пакетный файл можно модифицировать следующим образом

:test
if exist c:\1.txt goto go
sleep 10
goto test
:go
rename c:\1.txt 1.txt
if not errorlevel 0 goto go
del c:\1.txt

Когда файл 1.txt скопировался на диск С не полностью, либо занят другим приложением, попытка его переименовать вызовет ошибку и цикл будет повторяться до тех пор, пока файл не скопируется полностью либо не будет освобожден. После того, как команда rename c:\1.txt 1.txt будет выполнена без ошибки (т.е. файл свободен), то с ним можно выполнять любые действия. В последнем примере это его удаление.


Как добавить комментарии в bat-файл

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

goto start
———————————————————
Этот пакетный файл предназначен
для автоматизации рутинных операций,
выполняемых ночью для синхронизации
содержимого корпоративного ftp-сервера
с ftp-серверами филиалов
———————————————————
Пакетный файл написан 01/01/2004
Последнее исправление внесено 10/02/2004
———————————————————
И т.д.
:start

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

rem Этот блок устанавливает соединение с удаленным сервером

:: Этот блок проверяет дату изменения файлов

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


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

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

Скрипт архивирует папку файлопомойки (\\SERVER\e$ \Exchange)
и папку с данными юзеров (домашнюю Данные пользователей (\\SERVER\e$ \Departments))
Скрипт не архивирует медиафайлы, так как они занимают вагон места и их потеря у меня не критична 

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-файлом, то отследить (и запретить) его повторный запуск можно таким образом: 

pslist.exe -e "процесс"
if %errorlevel%==1 start "" "программа" 

pslist - бесплатная утилита, которую можно скачать здесь.

Как создать папку с именем равным текущей дате 

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

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 будет переименовано в test2005.03.05.txt


Можно ли зациклить в bat-файле выполнение команды? 

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

Цикл организуется при помощи следующих команд: 

:loop
... goto loop 

Паузу можно создать при помощи любой команды. Например, при помощи ping: 

ping -n 1 -w 100000 192.168.254.254 >nul 

-n 1 - выполнить один запрос
-w 100000 - ждать ответа 100 секунд (значение указывается в миллисекундах)
192.168.254.254 - IP адрес, который заведомо не существует в локальной сети, т.е. никогда не ответит на ping
>nul - перенаправление всего вывода команды ping в никуда.


Как в bat-файле создать паузу перед выполнением следующей команды? 

Паузу можно создать при помощи любой команды. Например, при помощи ping: 

ping -n 1 -w 100000 192.168.254.254 >nul 

-n 1 - выполнить один запрос
-w 100000 - ждать ответа 100 секунд (значение указывается в миллисекундах)
192.168.254.254 - IP адрес, который заведомо не существует в локальной сети, т.е. никогда не ответит на ping
>nul - перенаправление всего вывода команды ping в никуда.

Можно использовать утилиту sleep.exe из Ресурскита.

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

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

Создать BAT файл очень просто. Достаточно открыть блокнот и сохранить пустой лист с расширением .bat, выбрав опцию Сохранить как... и написав в поле Имя файла что-нибудь оканчивающееся на .bat, например test.bat.
Тип файла указываете как на скриншоте ниже - Все файлы. Сохраняете и получаете BAT файл.

Редактировать BAT файл можно в блокноте или любом другом текстовом редакторе, ориентированным на работу с кодом.

Теперь перейдем непосредственно к практической информации. В сети многие ищут ответ на вопрос Как быть с пробелами в BAT файлах?. В путях к папкам и исполняемым файлам наличие пробела вызывает ошибку. Самый распространенный ответ: Заключи путь в кавычки. И этот ответ не верен. Правда некоторые будут с пеной у рта утверждать, что он работает. Итак, появилось два почему - почему не верен и почему некоторые будут.

На Windows (как, впрочем, и на UNIX) установленные в системе программы соответствующим образом регистрируются системой. Поэтому некоторые из установленных программ могут запускаться одной простой командой из BAT файла или из апплета Выполнить панели Пуск. Одной из таких программ является Firefox:

start firefox

Если после этой команды писать путь к исполняемому файлу, то происходит следующее: запускается обозреватель Firefox и пробует обработать запрос, то есть файл, путь к которому указан. То есть, если указать следующее:

start firefox C:\Program Files\Mozilla Firefox\firefox.exe

Обозреватель откроется, чтобы не было написано после start firefox. Именно поэтому некоторые товарищи будут уверять что все прекрасно работает. Однако, если взять портативную программу, то ситуация окажется совсем иная. Рассмотрим в качестве примера ftp-клиент Filezilla. Поскольку система не знает о программе, вышеупомянутая строчка

start filezilla

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

start D:\FileZilla\FileZilla.exe

Длинныe имена в bat-файлах

Теперь поговорим о путях и пробелах. Первый способ избежать этой проблемы - использование короткого имени.

start C:\Program Files\Sound Club\scw.exe

В примере два имени с пробелами. Заменим их короткими. Правила создания коротких имен следующие: в коротком имени используются первые шесть символов имени без учета пробелов, после имени указывают порядковый номер папки с помощью символа ~. Так как папки Program Files и Sound Club у меня в единственном числе, получится следующее:

Program Files - Progra~1
 Sound Club - SoundC~1
 start C:\Progra~1\SoundC~1\scw.exe

Если рядом будут присутствовать две папки, например Sound Club и Sound Clown, то следуя правилам, в примере выше надо будет указать SoundC~2, так как в этом случае Sound Club окажется вторым именем (имена считаются в алфавитном порядке).

Но этот способ неудобен тем, что приходится указывать порядковые номера. Ситуация с Program files более менее нормальная. Мало у кого встретится две подобные папки на системном диске. Но если вы решили установить несколько продуктов Mozilla на свой компьютер. У вас получится несколько папок, например:

Mozilla Firefox
 Mozilla Thunderbird
 Mozilla Sunbird

Короткими именами для них будут

Mozill~1
 Mozill~2
 Mozill~3

А теперь представьте, что вы написали BAT файл с упоминанием этих программ. Если удалить Firefox, оставшиеся записи перестанут работать, а если удалить Thunderbird, перестанет работать запись для Sunbird. Короче, способ с короткими именами - не наш способ.

Пробелы и кавычки в bat-файлах

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

start "C:\Program Files\Sound Club\scw.exe"

Так команда не сработает, поскольку если посмотреть справку по ней (start /?), то в справке вы увидите следующее:

START ["заголовок"] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
 [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
 [/NODE узел NUMA] [/AFFINITY маска сходства] [/WAIT] [/B]
 [команда/программа] [параметры]

Как видите, первым параметром идёт заголовок окна и он как раз в кавычках. Этот параметр необязательный, но его всё же советуют указывать (например, тут), чтобы избежать ошибок при выполнении команды. Внутри кавычек можно ничего не писать. Получится так:

start "" "C:\Program Files\Sound Club\scw.exe"

Также сработает и вариант с заключением в кавычки всех имён с пробелами по отдельности:

start C:\"Program Files"\"Sound Club"\scw.exe

Однако, в ряде случаев не работает ничего из вышеописанного. В таких случаях я могу посоветовать использовать команду cd. Переходим на системный раздел, затем с помощью cd в папку Program Files и запускаем программу (start):

%SystemDrive%
 cd \Program Files\Sound Club\
 start scw.exe

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

start firefox
 start jetaudio
 

В данном случае отключен запуск установленной в системе программы Defraggler.exe. Комментируют строки, указывая команду rem в начале строки. Все BAT файлы выполняются в окне консоли. Чтобы оно исчезало по окончании выполнения команд, не забывайте в конце писать команду на выход exit.

start firefox
 start jetaudio
 
 exit

Запуск приложений из bat-файла

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

Выше было изложено несколько способов запуска приложений при помощи BAT файла. Самый первый - это короткая команда на запуск установленной в системе программы.

start firefox

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

start C:\"Program Files"\"Mozilla Firefox"\firefox.exe

Также я отметил, что в BAT файле обязательно должна присутствовать команда на завершение:

start C:\"Program Files"\"Mozilla Firefox"\firefox.exe
 exit

Запуск программ в bat-файлах с параметрами (ключами)

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

start /min D:\FileZilla\FileZilla.exe
 exit

Скомандовать в данном случае - значит указать ключ. Ключ указывается через слэш после основной команды (команда /ключ). Основной командой в данном случае является start. Правда ключ min работает только в половине случаев, потому как относится именно к команде запуска start, а не к программам, которые эта команда запускает.

Вообще ключей существует очень много и наборы ключей разных программ могут существенно различаться. Есть, правда, несколько общих. Например, ключ справки (/? или /help). Чтобы проследить работу этого ключа, рассмотрим практический пример. Откройте консоль (Жмёте      + R, вводите cmd, далее Enter) и набираете в консоли следующее:

start /?

Консоль выведет на экран перечень допустимых ключей c комментариями для команды start.

Обратите внимание на ключ /wait. В некоторых случаях он бывает просто незаменим. Например, вы решили с помощью BAT файла распаковать архив с программой и эту самую программу запустить. В батнике получится две команды - на распаковку и на запуск. Поскольку команды при запуске BAT файла выполнятся почти одновременно, архив распаковаться не успеет и запускать будет нечего. Поэтому будет ошибка. В этом случае на помощь придет ключ /wait:

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

start Sleep.exe 15

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

/S
 /s
 /q
 /silent
 и ряд других

В ряде случаев бывает очень удобно. Антивирус Avast имеет опцию тихой установки в корпоративной версии. В бесплатной (домашней) версии тихой установки якобы нет. Однако, если вы в курсе как работает инсталятор InstallShield, вы поймете, что это утка, так как этот инсталятор сам по себе поддерживает ключ тихой установки /S. А значит все продукты, выполненные на его базе - тоже. И Avast не исключение. Просто создаете в папке с Avast'ом BAT файл с содержанием

start avast.exe /S
 exit

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

Есть и другие возможности по управлению программами при помощи BAT файлов. Можно запустить программу, приказав ей открыть файл при запуске. Я пользуюсь этим способом при разработке сайтов. Очень удобно, когда весь твой инструментарий открывает нужные документы и папки нажатием всего одной кнопки:


 start /min D:\FileZilla\FileZilla.exe "ftp://логин:пароль@сервер"
 
 
 start C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php"
 
 
 start /min C:\"Program Files"\текстовой_редактор.exe "E:\сервер\папка_сайта\index.html"
 
 
 start /min E:\сервер\папка_с_сайтом
 
 
 exit

Отмечу, что все вышеописанные приемы можно применять в различных комбинациях и сочетаниях.

start /min /wait program.exe /m /S
 start C:\Directory\program2.exe "C:\Files\file.odt"
 exit

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

start C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php"

В качестве эпилога предложу для ознакомления конвертер BAT файлов в приложения формата .exe - Bat_To_Exe_Converter. BAT файл - это не всегда эстетично, а с помощью конвертера можно запаковать батник в exe'шник, оформив его любой иконкой на ваш выбор.

Наткнулся ещё на один конвертер BAT в EXE, можете рассмотреть в качестве альтернативы предыдущей программе: Advanced Bat To Exe Converter

На этом всё.

Если материалы сайта оказались для вас полезными, можете поддержать дальнейшее развитие ресурса, оказав ему (и мне ) моральную и материальную поддержку.

Урок bat-аники



Урок bat-аники
Автор: Алексей Александров
Источник: RSDN Magazine #2-2005
Опубликовано: 11.07.2005
Исправлено: 10.12.2016
Версия текста: 1.0

Введение

Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.

Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.

К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh. Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации.

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

ПРЕДУПРЕЖДЕНИЕ

Практически все описанные здесь рецепты подойдут только для Windows 2000 и старше. Bat-язык Windows 9x, к счастью, можно считать почившим, так что здесь он не рассматривается. Более того, диалекты cmd.exe операционных систем Windows 2000, Windows XP и Windows Server 2003 также немного различаются. Все приведенное ниже создано и проверено на компьютере под управлением операционной системы Windows XP. За подробной информацией по различиям в реализации той или иной команды обращайтесь к [1].

Как экранировать символ?

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

  • Операторы перенаправления ввода-вывода <, >, >>.
  • Оператор конвейера |.
  • Операторы объединения команд ||, & и &&.
  • Оператор разыменования переменной %…%.

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


 echo
 The ratio should be up to 10%.
 

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


 echo
 The ratio should be up to 10%%.
 

после чего все заработает так, как надо. Однако в других случаях все менее очевидно. Рассмотрим командный сценарий, который генерирует незатейливый HTML-файл:


 @echo
 
 off
 
 set OUTPUTFILE=%1
 
 echo<html> >%OUTPUTFILE%
 echo<head> >>%OUTPUTFILE%
 echo<title>This is a greeting page</title> >>%OUTPUTFILE%
 echo</head> >>%OUTPUTFILE%
 echo<body> >>%OUTPUTFILE%
 echoHello World! >>%OUTPUTFILE%
 echo</body> >>%OUTPUTFILE%
 echo</html> >>%OUTPUTFILE%
 

К сожалению, при попытке запуска этого "чуда инженерного разума" нас постигнет неудача в виде сообщения об ошибке


 > was unexpected at this time.
 

Оно и понятно: командный интерпретатор не в силах разобраться, где его просят вывести на экран символ HTML-тега, а где перенаправить вывод. В нормальных языках программирования эта проблема обычно решается обрамлением строковых литералов кавычками. Отчасти это помогает и в bat-файлах. Но лишь отчасти. Выполнение строки


 echo
 "<html>" >%OUTPUTFILE%
 

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

К счастью, есть один малоизвестный способ, позволяющий добиться требуемого результата. Символ ^ позволяет экранировать любой другой символ с безусловным приоритетом. Таким образом, вышеприведенный пример генерации HTML может быть успешно записан так:


 @echo off
 set OUTPUTFILE=%1
 
 echo^<html^> >%OUTPUTFILE%
 echo^<head^> >>%OUTPUTFILE%
 echo^<title^>This is a greeting page^</title^> >>%OUTPUTFILE%
 echo^</head^> >>%OUTPUTFILE%
 echo^<body^> >>%OUTPUTFILE%
 echoHello World! >>%OUTPUTFILE%
 echo^</body^> >>%OUTPUTFILE%
 echo^</html^> >>%OUTPUTFILE%
 

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

Как перенести длинную строку?

Совет по поводу экранирующего символа ^ имеет еще одно применение: перенос строк. Я (как и многие из вас, наверное) люблю, чтобы любой исходный текст, который я пишу, выглядел красиво – даже *.bat-файлы. Одним из обязательных условий красоты и удобочитаемости кода для меня является его ширина: все строки должны умещаться в 78 столбцов. Можно поспорить по поводу числа 78, но в одном я непреклонен – ограничение на ширину текста кода должно быть, иначе это не код, а макароны.

Так вот долгое время *.bat-файлы портили мне жизнь тем, что иногда приходилось писать длинную строку – например, вызов какой-нибудь другой программы с кучей опций, и я не знал, что с этим делать. Происходило это нечасто, но всегда было неприятно. Но, к счастью, моя жизнь изменилась с тех пор, как я открыл для себя Супер-Символ ^:


 packagebin.exe --recursive-search=yes --files-mask=exe,dll,pdb,obj ^
 --archive-type=zip --archive-level=max --deliver-method=ftp ^
 --deliver-target=ftp://ftp.site.com
 

Помните лишь, что чудо-символ должен быть последним в строке – скажите «Нет!» концевым пробелам.

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

Иногда сценарию надо знать полный путь к себе самому и/или к каталогу, в котором он находится. Это может понадобиться по разным причинам. Например, он должен достать из системы контроля версий исходники в каталог <script-dir>/src рядом с собой. Или, запускаются тесты из каталога <script-dir>/tests, и перед их запуском надо добавить каталог <script-dir>/bin в переменную PATH.

Можно, конечно, рассчитывать на то, что командный файл был вызван из того же каталога, где он находится, и тогда в качестве вышеупомянутого <script-dir> можно использовать переменную окружения %CD% - полный путь к текущему каталогу. Однако любые допущения в нашем деле недопустимы (хороший каламбур, однако!). Поэтому приведу более надежное решение.

Прежде всего, вспоминаем, что переменная %0 в bat-файле соответствует нулевому аргументу командной строки, т.е. имени самого файла. После этого читаем скудную документацию для команды call:

и обнаруживаем, что при использовании нумерованных переменных %0-%9 можно использовать некоторые модификаторы:


 %~1 - разворачивает %1, удаляя кавычки (")
 %~f1 - разворачивает %1 в полный квалифицированный путь
 %~d1 - разворачивает %1 в букву диска
 %~p1 - разворачивает %1 в путь
 %~n1 - разворачивает %1 в имя файла
 %~x1 - разворачивает %1 в расширение файла
 %~s1 - развернутый путь будет содержать только короткие имена
 %~a1 - разворачивает %1 в атрибуты файла
 %~t1 - разворачивает %1 в дату/время создания файла
 %~z1 - разворачивает %1 в размер файла
 %~$PATH:1 - Ищет в каталогах, перечисленных в переменной среды PATH,
 и разворачивает %1 в полное квалифицированное имя 
 первого совпадения. Если имя перменной среды
 не определено, или если файл не найден, этот 
 модификатор вернет пустую строку
 

и, более того:


 Модификаторы можно объединять для получения сложных результатов:
 
 %~dp1 - разворачивает %1 в букву диска и путь
 %~nx1 - разворачивает %1 в имя файла с расширением
 %~dp$PATH:1 – ищет %1 в каталогах, перечисленных в переменной 
 среды PATH, и разворачивает в букву диска
 и путь к первому найденному файлу.
 %~ftza1 - разворачивает %1 в строку, подобную DIR
 

Таким образом, правильным будет использовать в качестве тега <script-dir> сочетание %~dp0, которое будет раскрыто в полный путь к каталогу, где находится сценарий. Например,


 "%~dp0\packagebin.exe" --recursive-search=yes --files-mask=exe,dll,pdb,obj ^
 --archive-type=zip --archive-level=max --deliver-method=ftp ^
 --deliver-target=ftp://ftp.site.com --deliver-source="%~dp0\bin"
 

Обратите внимание на использование кавычек – потенциально каталог может иметь в своем пути пробел. Кавычки избавят от проблем в этом случае.

ПРЕДУПРЕЖДЕНИЕ

Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает. Однако возможны неожиданности. Однажды был написан простой командный сценарий, задача которого была просто удалить все каталоги рядом с собой. В «свою» директорию он переходил как раз через cd %~dp0. Все было проверено на локальной машине – работало замечательно. После этого сценарий был помещен на файл-сервер, где ему и полагалось быть. Я зашел с помощью Far в сетевой каталог, и для контрольной проверки решил запустить файл еще раз. Дальнейшее словно в тумане. cmd.exe правильно определил местонахождение bat-файла: \\servername\sharename\directory. Однако при попытке сделать туда cd, он сказал, что UNC-пути в качестве текущих каталогов не поддерживаются и лучше он сменит текущий каталог на C:\WINDOWS… Это было действительно мудрое решение… Часть сценария, отвечавшая за удаление всех каталогов, сработала отлично – хорошо, что я успел вовремя остановить это безумие.

В тот день я узнал, что такое System Restore…

Как получить короткое (8.3) имя файла?

«А зачем? – спросите вы – Ведь мы живем в мире Интернета, Web-сервисов и NTFS с длинными именами файлов». Это действительно так, но иногда встречаются программы, которые отчаянно сопротивляются прогрессу, и в частности, не любят имен файлов и полных путей с пробелами. Одной из таких программ, кстати, является утилита build.exe из Windows DDK… В таких ситуациях спасает использование короткого, «беспробельного» DOS-имени для файла.

ПРЕДУПРЕЖДЕНИЕ

Доступ к файлу по короткому имени может быть не всегда возможен. На файловой системе NTFS создание коротких псевдонимов для файлов может быть отключено путем установки в единицу значения «NtfsDisable8dot3NameCreation» в ключе реестра «HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem».

Итак, все же (в предположении, что надругательства над NTFS не было) – как? Внимательный читатель должен был заметить в предыдущем разделе, что при обращении к переменным %0 - %9 можно использовать префикс


 %~s1 - expanded path contains short names only
 

который нам как раз мог бы помочь. Но есть засада – все эти полезные префиксы нельзя использовать с произвольной переменной окружения, а присваивание переменным %0 - %9 не поддерживается. К счастью, описываемые префиксы можно еще использовать с переменными цикла for, и это дает нам способ достичь требуемого результата. Например, вот так можно получить 8.3-путь к “Program Files”:


 for /d %%i in ("%PROGRAMFILES%") do (
 set PROGRAMFILESSHORT=%%~si
 )
 
 echo8.3-имя для каталога "%PROGRAMFILES%" -^> "%PROGRAMFILESSHORT%"

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

Как перенаправить стандартный вывод в файл?

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


 echo
 Cleaning up the target directory >>%LOGFILE%
 ...
 echoThe target directory has been cleaned >>%LOGFILE%
 

Гораздо проще было бы перенаправить стандартный вывод в файл, чтобы все команды echo и вообще, все, что выводится на экран, автоматически попадали в журнальный файл. Сделать это можно следующим образом (рассмотрим на знакомом примере генерации HTML-файла):


 @echo off
 set OUTPUT=out.html
 
 if "%STDOUT_REDIRECTED%" == "" (
 set STDOUT_REDIRECTED=yes
 cmd.exe /c %0 %* >%OUTPUT%
 exit /b %ERRORLEVEL%
 )
 
 echo^<html^>
 echo^<head^>
 echo^<title^>This is a greeting page^</title^>
 echo^</head^>
 echo^<body^>
 echoHello World!
 echo^</body^>
 echo^</html^>

Здесь делается то же, что и раньше, но с перенаправлением стандартного вывода в файл out.html. Делается это простым способом – перезапуском сценарием самого себя. Сначала проверяется, не установлена ли переменная окружения STDOUT_REDIRECTED. Если она установлена, значит, сценарий уже перезапущен с перенаправленным выводом и можно просто продолжить работу. Если же переменная не установлена, то мы ее устанавливаем и перезапускаем скрипт (cmd.exe /c %0) с таким же набором параметров, что и исходная команда (%*) и перенаправленным в файл стандартным выводом (>%OUTPUT%). После завершения выполнения «перенаправленной» команды выходим.

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

Как сложить два числа?

Краткий ответ – смотри:

Длинный ответ таков. В bat-файлах можно производить довольно-таки продвинутые вычисления – продвинутые не в сравнении с другими языками, а в сравнении с отсутствием возможности что-либо вычислить вообще. Вычисление осуществляется командой set, если она выполняется с ключом /a. Поддерживается практически полный набор операторов языка C, включая шестнадцатеричный модификатор 0x. Переменные окружения в выражении не обязательно заключать в знаки процента – все, что не является числом, считается переменной. Подробнее – все-таки в man set, тьфу, то есть в set /?. А здесь напоследок – просто несколько примеров.


 @echo off
 
 set ARG=1
 
 remset /a RESULT=ARG + 2
 echo%RESULT%
 remremset /a RESULT="ARG << 2"
 echo%RESULT%
 remset /a RESULT=0x1234 + 0x6786
 echo%RESULT%
 rem

А можно создать в bat-файле функцию?

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


 call :метка аргументы
 

Возврат из функции производится командой:


 exit /b [опциональный код возврата]
 

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

За подробностями обращайтесь к:

Что интересно, команда call с таким синтаксисом поддерживает рекурсивные вызовы с автоматическим созданием нового фрейма для переменных аргументов %0-%9. Иногда это может быть полезным. Вот классический пример рекурсивного подсчета факториала на командном языке:


 @echo off
 
 call :factorial %1
 echo %RESULT%
 exit
 remremremremrem:factorial
 
 if %1 == 0 (
 set RESULT=1
 exit /b
 )
 
 if %1 == 1 (
 set RESULT=1
 exit /b
 )
 
 set /a PARAM=%1 - 1
 
 call :factorial %PARAM%
 
 set /a RESULT=%1 * %RESULT%
 
 exit /b
 

Пример работы:


 > factorial.bat 10
 3628800
 

Как можно избежать использования goto?

Любой хоть сколько-то осмысленный *.bat-файл длиной больше 50 строк является ярким лозунгом в поддержку работы Дейкстры «О вреде оператора goto». Мешанина из переходов вперед и назад действительно является кодом «только для записи». Можно ли что-то предпринять по этому поводу?

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


 if condition goto :THEN
 remremgoto IF_END
 :THEN
 remrem:IF_END
 

Но к счастью, командный интерпретатор cmd.exe современных ОС Windows 2000 и старше поддерживает блоки команд в конструкциях ветвления, что устраняет необходимость применения меток. Блоки команд заключаются в круглые скобки. Выглядит это так (имитируя C/C++ indentation style):


 if condition (
 remrem) else (
 remrem)
 

Конкретный пример использования:


 @echo off
 
 set BUILDMODE=%1
 
 if "%BUILDMODE%" == "" (
 echoFAIL: Аргумент является обязательным ^(--debug, --release^)exit /b 1
 )
 
 remset BUILDMODE=%BUILDMODE:-=%
 
 if "%BUILDMODE%" == "debug" (
 echoINFO: Устанавливаем debug-режим окруженияset CCFLAGS=/Od /MDd /Z7
 ) else (
 echoINFO: Устанавливаем release-режим окруженияset CCFLAGS=/O2 /MD
 )
 

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


 if "%BUILDMODE%" == "debug" (
 echoINFO: Устанавливаем debug-режим окружения
 set OPTFLAGS=/Od
 set CCFLAGS=%OPTFLAGS% /MDd /Z7
 ) else (
 echoINFO: Устанавливаем release-режим окружения
 set OPTFLAGS=/O2
 set CCFLAGS=%OPTFLAGS% /MD
 )
 

Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.

Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe, либо использованием команды


 setlocal enabledelayedexpansion
 

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

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


 setlocal enabledelayedexpansion
 
 remif "%BUILDMODE%" == "debug" (
 echoINFO: Setting up debug mode environment
 set OPTFLAGS=/Od
 set CCFLAGS=!OPTFLAGS! /MDd /Z7
 ) else (
 echoINFO: Setting up release mode environment
 set OPTFLAGS=/O2
 set CCFLAGS=!OPTFLAGS! /MD
 )
 

Вот теперь это почти полноценный if-then-else блок. Почти, потому что если в одной из команд echo у вас встретится закрывающая круглая скобка, то вам необходимо заэкранировать ее символом ^, иначе синтаксический анализатор путается…

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

Как обработать текстовый файл?

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

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


 
 buildmode=release
 
 compiler=cl.exe
 
 arch=x86
 

Ничего сверхъестественного – простой key=value формат с возможностью вставки Unix-style комментариев. Помочь в чтении и обработке этого файла нам сможет команда for. Ее дополнительные опции позволяют задать и разделители, и символ начала комментария, и кое-что еще. Вот командный файл, который выполняет поставленную задачу:


 @echo off
 
 remremremcall :read_settings %~dp0\settings.txt || exit /b 1
 
 remechoBuild mode : %BUILDMODE%echoCompiler : %COMPILER%
 echoArchitecture: %ARCH%
 remexit /b 0
 
 remremremrem:read_settings
 
 set SETTINGSFILE=%1
 
 remif not exist %SETTINGSFILE% (
 echoFAIL: Файл с настройками отсутствуетexit /b 1
 )
 
 remremremremremremremremremremfor /f "eol=# delims== tokens=1,2" %%i in (%SETTINGSFILE%) do (
 remremremset %%i=%%j
 )
 
 exit /b 0
 

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

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


 @echo off
 
 for /f "tokens=* usebackq" %%i in (`cmd.exe /c ver`) do (
 set VERSION=%%i
 )
 
 echo%VERSION%

Особенно меня умиляет наличие опции “usebackq”, которая делает синтаксис отдаленно похожим на юниксовый. И в стенах царства Билла есть граждане, скучающие по /bin/sh и пытающиеся хоть как-то скрасить существование свое и окружающих. Следующий совет это также косвенно подтверждает.

Что это за упомянутые ранее операторы объединения команд?

Это операторы &, && и ||. Они практически совсем не освещены в документации, но полезны в повседневности. Они позволяют объединять несколько команд в одну, т.е. примерно так:


 command1 & command2
 command1 && command2
 command1 || command2
 

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

Оператор && гарантирует, что вторая команда будет выполнена только, если первая была выполнена успешно, т.е. с нулевым кодом возврата (он же %errorlevel%). Такие конструкции очень популярны в мире shell-сценариев Unix. Например:

Я был приятно удивлен, узнав, что cmd.exe тоже умеет выполнять такие конструкции. Это безопаснее и правильнее, нежели простое последовательное выполнение этих команд, и короче и проще, чем строгая проверка и обработка кодов возврата. Очень удобно при написании на скорую руку. Не менее полезен иногда и оператор ||. Суть его тоже логична – выполнить вторую команду, если первая дала сбой. Часто встречается в таких идиомах:

Если перейти в каталог sources не удастся, то будет произведен выход с кодом ошибки 1. Если же первая команда отработает нормально, то вторая выполнена не будет. Например, такая простейшая защита помогла бы в случае с cd по UNC-адресу, описанному ранее.

Можно ли написать на bat-языке серьезную программу?

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

  • Perl
  • Python
  • Ruby
  • JScript / VBScript

Последние, кстати, присутствуют в Windows 2000/XP по умолчанию (с некоторыми функциональными различиями) и в целом могут считаться заменой *.bat языку. Однако сдается мне, что *.bat-файлы проживут еще очень долго.

Дай Бог, чтобы я ошибся…

Материалы по теме

  1. Windows Batch Files – Commands Reference.
  2. Windows 2000. Команды: Карманный справочник. Э. Фриш. – М.: Мир, 2003.

Эта статья опубликована в журнале RSDN Magazine #2-2005. Информацию о журнале можно найти здесь

Как сделать батник

Обновлено: 07.10.2019, Computer Hope

Ниже приведены шаги по созданию командного файла на любом компьютере под управлением операционной системы Microsoft (например, MS-DOS или любой версии Windows).

Создание командного файла в Microsoft Windows

В Windows вы можете создать командный файл, выполнив следующие действия или шаги, указанные в разделе командной строки MS-DOS. Если вам удобнее работать с Microsoft Windows, вы можете использовать любой текстовый редактор (например, Блокнот или WordPad) для создания командных файлов.Если расширение файла заканчивается на .bat . В приведенном ниже примере мы используем Блокнот Windows для создания командного файла.

  1. Нажмите Пуск.
  2. Введите Блокнот в поле Выполнить и нажмите Введите .
  3. Открыв Блокнот, введите следующие строки или скопируйте и вставьте их.
 @ эхо выкл. echo Привет, это тестовый пакетный файл Пауза каталог c: \ windows пауза 
  1. Щелкните File , а затем Save , а затем перейдите туда, где вы хотите сохранить файл.В качестве имени файла введите test.bat и, если в вашей версии Windows есть параметр Сохранить как тип , выберите Все файлы , в противном случае он будет сохранен как текстовый файл. Выполнив эти шаги, нажмите кнопку Сохранить и выйдите из блокнота.
  2. Чтобы запустить командный файл, дважды щелкните его, как любую другую программу. После завершения работы командного файла он автоматически закрывается.

Создание командного файла в MS-DOS

Чтобы создать пакетный файл в MS-DOS или командной строке Windows, выполните следующие действия.

Запись

Новые версии Windows или компьютеры с 64-разрядной версией Windows больше не поддерживают команду редактирования, что означает, что эти шаги больше не работают. Выполните указанные выше действия, если вы используете последнюю версию Windows.

  1. Откройте командную строку Windows.
  2. В командной строке MS-DOS введите: edit test.bat и нажмите Enter.
  3. При правильном вводе должен появиться синий экран редактирования. На экране редактирования введите:
 @ эхо выкл. echo Привет, это тестовый пакетный файл Пауза каталог c: \ windows пауза 
  1. После ввода этих трех строк щелкните File и выберите exit ; когда будет предложено сохранить, нажмите Да .Пользователи без мыши могут выполнить ту же задачу, нажав Alt + F для доступа к меню файла, а затем X для выхода. Нажмите Введите , чтобы сохранить изменения.
  2. Вернувшись в командную строку MS-DOS, введите: test и нажмите . Введите , чтобы запустить файл test.bat. Поскольку первая строка - это пауза, сначала вам будет предложено нажать клавишу. После этого командный файл запускается построчно; в этом случае перечисление файлов в каталогах Windows и Windows \ system.
Наконечник

Если вы хотите добавить больше строк в этот командный файл, введите edit test.bat , чтобы открыть файл для редактирования.

Дополнительная информация о команде редактирования MS-DOS находится на нашей странице команд редактирования. Некоторые версии MS-DOS и загрузочные дискеты могут не иметь команды редактирования. В этом случае вам нужно будет либо получить файл edit.com, либо использовать команду copy con.

.

Как выполнять команды cmd из командного файла?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

Открытие определенного файла с помощью командного файла?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

команд командного файла (A-Z) | Пояснения и примеры

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

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

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

Команды командного файла: Windows / DOS

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

Список команд командного файла

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

АССОК

Пакетная команда ASSOC связывает расширение файла с типом файла или перечисляет все ассоциации.

Пример

  @ эхо ВЫКЛ. АССОК | найти ".txt" пауза  

Выход

  .txt = текстовый файл  

Как показано в выходных данных выше, он отображает ассоциацию файлов для .txt с расширением .

Если записан и выполнен только ASSOC , он отобразит все ассоциации файлов для каждого расширения, а не только расширение .txt .

Нажмите здесь, чтобы вернуться к списку команд

АТРИБ

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

Пример

Теперь предположим, что у нас есть файл note.txt в нашем рабочем каталоге. Мы отобразим его атрибуты файла, а затем сделаем его скрытым и доступным только для чтения, добавив к нему атрибуты 'ah' и 'r' . И, наконец, мы удалим некоторые добавленные атрибуты.

  @ эхо ВЫКЛ. :: Для отображения атрибута note.txt ATTRIB note.txt :: Чтобы сделать его только для чтения, добавив 'r' ATTRIB + r примечание.текст ATTRIB note.txt :: Чтобы скрыть его, добавив "ах" ATTRIB + ah note.txt ATTRIB note.txt :: Чтобы удалить атрибут только для чтения ATTRIB -r note.txt ATTRIB note.txt  

Выход

  Примечание.txt A R note.txt A R AH note.txt AH note.txt  

Здесь в этом выводе A означает Архивный , R означает Только чтение и AH означает Скрытый файл .

Нажмите здесь, чтобы вернуться к списку команд

CD

Пакетная команда CD помогает перемещаться по различным каталогам и менять каталоги или отображать текущий каталог.

Пример

  @ эхо ВЫКЛ. :: CD без каких-либо параметров отображает текущий рабочий каталог CD :: Переход к родительскому каталогу на один уровень выше CD.. CD :: Изменение пути к программам CD \ Программы CD пауза  

Выход

  C: \ Пользователи \ abc C: \ Пользователи C: \ Программы  

Нажмите здесь, чтобы вернуться к списку команд

ЧКДСК

Пакетная команда CHKDSK используется для проверки ошибок на диске.

Пример

  @ эхо ВЫКЛ. ЧКДСК  

Нажмите здесь, чтобы вернуться к списку команд

ВЫБОР

Пакетная команда CHOICE предоставляет пользователю список опций.

Пример

  @ эхо ВЫКЛ. ЭХО Хочешь кофе? ECHO Введите Y для да ECHO Введите N, если нет ВЫБОР / c ДН / м «Да или Нет»  

Выход

Теперь этот сценарий выдаст следующий результат.

  Хотите кофе? Введите Y для да Введите N, если нет Да или Нет [Д, Н]?  

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

Нажмите здесь, чтобы вернуться к списку команд

CLS

Пакетная команда CLS очищает экран.

Пример

  @ эхо ВЫКЛ. CLS пауза  

Эта команда просто очищает все журналы на экране командной строки.

Нажмите здесь, чтобы вернуться к списку команд

CMD

Пакетная команда CMD вызывает новое окно командной строки.

Пример

  @ эхо ВЫКЛ. CMD  

Нажмите здесь, чтобы вернуться к списку команд

КОМП

Пакетная команда COMP сравнивает размер двух файлов и проверяет, различаются ли они по размеру.

Пример

  @ эхо ВЫКЛ. КОМП C: \ abc.txt C: \ xyz.txt  

Нажмите здесь, чтобы вернуться к списку команд

ПРЕОБРАЗОВАТЕЛЬ

Пакетная команда ПРЕОБРАЗОВАЕТ тома или диски из одного формата в другой, то есть из FAT в NTFS.

Пример

  @ эхо ВЫКЛ. ПРЕОБРАЗОВАТЬ D: \  

Нажмите здесь, чтобы вернуться к списку команд

КОПИЯ

Пакетная команда COPY используется для копирования файлов из одного места в другое.

Пример

  @ эхо ВЫКЛ. :: Для копирования с одного диска на другой -xyz.txt из D: \ в E: \ КОПИЯ D: \ xyz.txt E: \ :: Если в имени файла есть пробелы - используйте двойные кавычки КОПИРОВАТЬ "D: \ my file.txt" E: \  

Нажмите здесь, чтобы вернуться к списку команд

ДАТА

Пакетная команда DATE отображает текущую дату в системе.

Пример

  @ эхо ВЫКЛ. echo% DATE%  

Выход

  Пт 07.07.2017  

Эта команда DATE отображает системную дату в командной строке, как показано выше.

Нажмите здесь, чтобы вернуться к списку команд

DEL

Пакетная команда DEL используется для удаления файлов.

Пример

  @ эхо ВЫКЛ. :: Чтобы удалить отдельный файл xyz.txt DEL D: \ xyz.txt :: Удалить все файлы с расширениями .txt и запросить подтверждение перед удалением DEL / p / s D: \ *. Txt :: Remove \ p для удаления без подтверждения DEL / с D: \ *. Txt  

Примечание. Команда DEL удаляет только файлы, но не каталоги.

Нажмите здесь, чтобы вернуться к списку команд

DIR

Пакетная команда DIR выводит список всего содержимого каталогов.

Пример

  @ эхо ВЫКЛ. :: Чтобы вывести все содержимое текущего каталога DIR :: Вывести список всех скрытых файлов рабочего каталога DIR / ах :: Вывести список всех файлов с расширениями .php DIR * .php  
ДИСКОВАЯ ЧАСТЬ

Пакетная команда DISKPART показывает свойства раздела диска.

Пример

  @ эхо ВЫКЛ. DISKPART  

Этот сценарий запросит у пользователей разрешение на проверку свойств раздела диска и, если это разрешено, отобразит следующий вывод в консоли в зависимости от свойств диска.

Нажмите здесь, чтобы вернуться к списку команд

ЗАПРОС ВОДИТЕЛЯ

Пакетная команда DRIVERQUERY отображает все установленные драйверы и их свойства.

Пример

  @ эхо ВЫКЛ. ЗАПРОС ВОДИТЕЛЯ  

Выход

Этот вывод показывает часть списка драйверов с их свойствами и датой установки. DRIVERQUERY команда показывает весь список драйверов, который огромен.

Нажмите здесь, чтобы вернуться к списку команд

ECHO

Пакетная команда ECHO используется для вывода команд включения / выключения и вывода сообщения на консоль.

Пример

  @ эхо ВЫКЛ. эхо Привет  

Выход

  Привет  

Эта команда ECHO отображает Hello в консоли, как показано выше.

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

Если бы это эхо не было выключено, то вывод был бы таким:

  C: \> echo Привет Привет  

Нажмите здесь, чтобы вернуться к списку команд

ВЫХОД

Пакетная команда EXIT завершает работу и закрывает консоль.

Пример

  @ эхо ВЫКЛ. эхо HI ВЫХОД  

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

Нажмите здесь, чтобы вернуться к списку команд

РАСШИРЯТЬ

Пакетная команда EXPAND извлекает содержимое файла .cab .

Пример

  @ эхо ВЫКЛ. РАСШИРЯТЬ xyz.такси  

Этот сценарий извлечет все содержимое файла xyz.cab в то же место, где находится xyz.cab .

Нажмите здесь, чтобы вернуться к списку команд

FC

Пакетная команда FC находит разницу между двумя файлами и отображает их на консоли.

Пример

  @ эхо ВЫКЛ. FC D: \ a.txt D: \ b.txt  

Этот сценарий найдет разницу в содержании обоих файлов и выведет список всех из них.

Нажмите здесь, чтобы вернуться к списку команд

НАЙТИ

Пакетная команда НАЙТИ выполняет поиск в заданном файле, чтобы найти нужную строку, и, если она есть, отображает соответствующую строку, в которой эта строка существует.

Пример

  @ эхо ВЫКЛ. НАЙТИ "найди меня" example.txt  

Этот сценарий будет искать строку «найди меня» в файле example.txt и, если она существует в файле example.txt, отобразит соответствующую строку на консоли.

Нажмите здесь, чтобы вернуться к списку команд

ФОРМАТ

Пакетная команда FORMAT используется для форматирования диска формата FAT 16/32 или NTFS в Windows.

Пример

  @ эхо ВЫКЛ. ФОРМАТ E: \  

Этот сценарий отформатирует диск E и перезапишет предыдущее содержимое.

Нажмите здесь, чтобы вернуться к списку команд

HELP

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

Пример

  @ эхо ВЫКЛ. ПОМОГИТЕ  

Теперь это отобразит все доступные команды с их функциями в консоли.

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

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

  @ эхо ВЫКЛ. :: Просто введите help и команду, о которой хотите узнать. ПОМОЩЬ копия  

Теперь это отобразит подробную информацию о команде копирования.

Как видите, HELP COPY отображает все подробности о команде COPY .

Нажмите здесь, чтобы вернуться к списку команд

IPCONFIG

Пакетная команда IPCONFIG отображает конфигурацию IP Windows.

Пример

  @ эхо ВЫКЛ. IPCONFIG  

Этот сценарий сгенерирует следующий вывод.

стр.S: Мы скрыли адрес iPV6 в приведенном выше выводе.

Нажмите здесь, чтобы вернуться к списку команд

ТАБЛИЧКА

Пакетная команда LABEL отображает метку диска или тома, а также используется для добавления, установки или удаления метки диска.

Пример

  @ эхо ВЫКЛ. МЕТКА  

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

Например, мой рабочий каталог - D :, и на нем есть ярлык «приложения». Таким образом, он выдаст следующий результат:

Нажмите здесь, чтобы вернуться к списку команд

MD

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

Пример

  @ эхо ВЫКЛ. MD abc  

Эта программа создаст новый каталог abc в текущем рабочем месте.

Нажмите здесь, чтобы вернуться к списку команд

БОЛЬШЕ

Пакетная команда БОЛЬШЕ отображает содержимое файла одно за другим.

Пример

  @ эхо ВЫКЛ. БОЛЬШЕ D: \ example.txt  

Эта программа будет отображать содержимое example.txt построчно, по очереди.

Нажмите здесь, чтобы вернуться к списку команд

ПЕРЕМЕЩЕНИЕ

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

Пример

  @ эхо ВЫКЛ. :: Чтобы переместить xyz.txt из dir1 в dir2 ПЕРЕМЕСТИТЬ C: \ dir1 \ xyz.txt C: \ dir2 :: Чтобы переименовать каталог dir1 в dir2 ПЕРЕМЕСТИТЬ C: \ Program \ dir1 C: \ Program \ dir2 :: Чтобы переместить каталог dir1 из D: \ в D: \ music ПЕРЕМЕСТИТЬ D: \ dir1 D: \ music \  

Таким образом, команда MOVE может использоваться для перемещения файлов, каталогов и переименования каталогов.

Нажмите здесь, чтобы вернуться к списку команд

НЕТТО

Пакетная команда NET используется для многих сетевых функций в зависимости от используемых команд.

Пример

Для отображения пользователей:

  @ эхо ВЫКЛ. NET пользователей  

Это даст следующий результат:

Как и у пользователей, есть много других команд:

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

Нажмите здесь, чтобы вернуться к списку команд

ПУТЬ

Пакетная команда PATH отображает переменную пути или ее можно использовать для установки переменной пути.

Пример

  @ эхо ВЫКЛ. ECHO% PATH%  

Эта программа отобразит путь к текущему рабочему каталогу.

Нажмите здесь, чтобы вернуться к списку команд

ПАУЗА

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

Пример

  @ эхо ВЫКЛ. ЭХО привет Пауза  

Эта программа напечатает hi в консоли и покажет сообщение «Нажмите любую клавишу, чтобы продолжить.. ’И дождитесь ввода от пользователя.

Нажмите здесь, чтобы вернуться к списку команд

ПИНГ

Пакетная команда PING используется для отправки пакетов ICMP / IP на указанный адрес по сети.

Пример

  @ эхо ВЫКЛ. ПИНГ 127.0.1.1  

Выход

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

  Пинг 127.0.1.1 с 32 байтами данных: Ответ от 127.0.1.1: байты = 32, время <1 мс TTL = 128 Ответ от 127.0.1.1: байты = 32, время <1 мс TTL = 128 Статистика пинга для 127.0.1.1: Пакеты: отправлено = 2, принято = 2, потеряно = 0 (потеря 0%), Приблизительное время в оба конца в миллисекундах: Минимум = 0 мс, Максимум = 0 мс, Среднее = 0 мс  

Нажмите здесь, чтобы вернуться к списку команд

РД

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

Пример

  @ эхо ВЫКЛ. :: Чтобы удалить каталог xyz из C: \> RD C: \ xyz :: Чтобы удалить несколько каталогов из рабочего места RD dir1 dir2  

Нажмите здесь, чтобы вернуться к списку команд

REM

Пакетная команда REM обозначает комментарии в пакетном сценарии.

Пример

  @ эхо ВЫКЛ. REM Это комментарий  

Все, что написано после REM , интерпретируется как комментарий и не выполняется в пакетных программах.

Нажмите здесь, чтобы вернуться к списку команд

REN

Пакетная команда REN используется для переименования файлов и каталогов.

Пример

  @ эхо ВЫКЛ. :: Чтобы переименовать x.php в y.php REN C: \ x.php C: \ y.php  

Нажмите здесь, чтобы вернуться к списку команд

НАБОР

Пакетная команда SET отображает список переменных среды системы.

Пример

  @ эхо ВЫКЛ. НАБОР  

Нажмите здесь, чтобы вернуться к списку команд

ВЫКЛЮЧЕНИЕ

Пакетная команда SHUTDOWN при вызове выключает компьютер.

Пример

  @ эхо ВЫКЛ. ВЫКЛЮЧЕНИЕ  

Нажмите здесь, чтобы вернуться к списку команд

СОРТ

Пакетная команда SORT используется для сортировки содержимого файла по алфавиту.

Пример

  @ эхо ВЫКЛ. СОРТИРОВАТЬ D: \ example.txt  

Этот сценарий сортирует содержимое example.txt в алфавитном порядке по возрастанию или убыванию.

Нажмите здесь, чтобы вернуться к списку команд

СТАРТ

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

Пример

  @ эхо ВЫКЛ. ЗАПУСК paint.exe  

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

Нажмите здесь, чтобы вернуться к списку команд

СИСТЕМИНФО

Пакетная команда SYSTEMINFO отображает всю конфигурацию компьютера и операционной системы.

Пример

  @ эхо ВЫКЛ. SYSTEMINFO  

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

Конечно, подробностей будет гораздо больше, но, пожалуйста, попробуйте посмотреть на своем ПК.

Нажмите здесь, чтобы вернуться к списку команд

ТАСККИЛЛ

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

Пример

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

  @ эхо ВЫКЛ. TASKKILL / им notepad.exe  

Нажмите здесь, чтобы вернуться к списку команд

СПИСОК ЗАДАЧ

Пакетная команда TASKLIST выводит список всех запущенных задач в консоли.

Пример

  @ эхо ВЫКЛ. СПИСОК ЗАДАЧ  

Нажмите здесь, чтобы вернуться к списку команд

ВРЕМЯ

Пакетная команда TIME используется для отображения или установки системного времени.

Пример

  @ эхо ВЫКЛ. ЭХО% ВРЕМЯ%  

Выход

  18: 01: 22: 06  

Текущее время отображается в консоли.

Нажмите здесь, чтобы вернуться к списку команд

НАЗВАНИЕ

Пакетная команда TITLE устанавливает новый заголовок для консоли вывода.

Пример

  @ эхо ВЫКЛ. TITLE Новая консоль  

Этот сценарий установит заголовок консоли вывода на «Новая консоль». Таким образом, консоль вывода будет выглядеть так:

Нажмите здесь, чтобы вернуться к списку команд

ДЕРЕВО

Пакетная команда TREE отображает древовидную диаграмму подкаталогов до последнего уровня.

Пример

У меня есть папка фильмы. Итак, если бы я запустил TREE в этой папке с фильмами, он создаст дерево фильмов внутри этой папки, а также подкаталоги, в которых есть файл фильма и файл субтитров.

  @ эхо ВЫКЛ. ДЕРЕВО D: \ movies  

Выход

Этот сценарий сгенерирует следующий вывод.

Нажмите здесь, чтобы вернуться к списку команд

ТИП

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

Пример

  @ эхо ВЫКЛ. ТИП C: \ notes.txt Пауза  

Эта программа выведет на консоль все содержимое файла notes.txt и .

Нажмите здесь, чтобы вернуться к списку команд

VER

Пакетная команда VER отображает версию Windows или MS-DOS.

Пример

  @ эхо ВЫКЛ. VER пауза  

Выход

  Microsoft Windows [Версия 10.0,14393]  

Нажмите здесь, чтобы вернуться к списку команд

ТОМ

Пакетная команда VOL отображает текущую метку тома Windows.

Пример

  @ эхо ВЫКЛ. ТОМ  

Выход

  Microsoft Windows [Версия 10.0.14393]  

Нажмите здесь, чтобы вернуться к списку команд

XCOPY

Пакетная команда XCOPY похожа на команду COPY , но команда COPY копирует отдельный файл, тогда как команда XCOPY копирует целые каталоги, включая подкаталоги.

Пример

  @ эхо ВЫКЛ. XCOPY D: \ test.txt в E: \  

Этот сценарий скопирует test.txt с диска D на диск E.

Нажмите здесь, чтобы вернуться к списку команд

Итак, это команды пакетного файла вместе с примерами.

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



.Командная строка

- Как изменить каталог с файлом BAT?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант
.

cmd - Как запустить несколько файлов .BAT в файле .BAT

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.

Смотрите также