Батник написать: Написание bat файлов — примеры батников | Info-Comp.ru
Содержание
atom — Как сделать последовательное выполнение команд в bat файле?
Вопрос задан
Изменён
1 год 2 месяца назад
Просмотрен
1k раза
Пытаюсь написать bat файл, для установки всех модулей приложения Atom:
@echo off apm install atom-beautify apm install atom-runner apm install color-picker pause
,но после запуска выполняется только 1 команда, и командная строка тут же закрывается.
Как сделать установку последовательной, чтобы весь процесс выводился в консоль?
- bat
- atom
0
Если вызываемый скрипт может закрывать консоль, то стоит его запускать в другой консоли явно. В таком случае если он её закроет, текущая продолжит работать.
pause
по сути получается как-то так:
@echo off apm install atom-beautify & apm install atom-runner & apm install color-picker & pause
5
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Операторы AND / OR в bat файлах
Бывает, что при написании командного файла (пакетного файла, bat файла, cmd файла) требуется записать в условном операторе IF более сложное условие, составленное с помощью операторов И и ИЛИ.
Как известно, bat файлы не имеют таких логических операторов, поэтому в них нельзя написать конструкции типа:
if "%var1%" == "value1" and %var2% == "value2" ...
Эта статья рассказывает, как в bat файле реализовать логику операторов И / ИЛИ другими доступными способами.
Надо сказать, что всё-таки командные файлы Windows предназначены для пакетного выполнения консольных команд, и задачи по расчету или обработке данных лучше писать в скриптах (PowerShell, WSH / JScript / VBScript), вызывая их из bat файла.
Ссылки для скачивания файлов находятся в конце статьи.
Оператор IF с логическим И (AND) в bat файле
Самый простой вариант – вложенное выполнение двух операторов IF:
if "%var1%" == "value1" if %var2% == "value2" . ..
То есть вместо and мы просто пишем if. Можно использовать не только проверку значения переменной, но и проверку наличия файла. Условий может быть больше двух.
Пример:
if "%a%" == "backup" if "%b%" == "true" if not exist "backup.dat" echo Условие выполнено
Оператор IF с логическим ИЛИ (OR) в bat файле
С оператором OR так просто не получится, причем есть разные способы.
Способ 1 – через последовательные ИЛИ
Каждое условие записывается в отдельный IF, каждый из которых заносит результат в общую переменную. В итоге, если было выполнено хотя бы одно из условий, в общей переменной будет этот результат.
В примере ниже значение переменной a сравнивается с тремя значениями, и для любого из value1, value2, value3 условие будет выполнено. А если задать a какое-то другое значение, например, set a=value4, то условие выполнено не будет, что нам и нужно:
if "%a%" == "value1" set res=true if "%a%" == "value2" set res=true if "%a%" == "value3" set res=true if defined res ( echo Условие выполнено ) else ( echo Условие не выполнено )
Способ 2 — через И и НЕ
Этот способ основан на том факте, что логическую операцию ИЛИ можно представить через операции И и НЕ, например, a OR b эквивалентно NOT ( NOT A AND NOT B ). Оператор NOT уже есть в bat файлах, а оператор AND можно представить через последовательные IF, как мы видели выше.
Поэтому тот же результат можно получить по-другому:
set res=true if not "%a%" == "value1" if not "%a%" == "value2" if not "%a%" == "value3" set res=false if "%res%"=="true" ( echo Условие выполнено ) else ( echo Условие не выполнено )
Этот способ занимает немного меньше строк, чем предыдущий.
Файлы для скачивания
Все файлы, описанные в статье, можно скачать с Яндекс.Диска.
- Скачать bat файлы с реализацией операторов AND и OR
- Скачать все скрипты
Операторы AND / OR в bat файлах
Метки: bat
Пакетные файлы — команда TYPE
Пакетные файлы — команда TYPE
TYPE используется в основном для просмотра небольших файлов ASCII, таких как AUTOEXEC.BAT.
Но его также можно использовать для:
- Просмотр текстовых файлов, которые могут использоваться
- Удалить строку из текстового файла
- Показать размер используемых файлов
- Преобразование Unicode в ASCII vv
- Преобразование «одиночных» переводов строки в пары CR/LF
Просмотр текстовых файлов, которые могут использоваться
TYPE имеет по крайней мере одну особенность, которая делает его подходящим для выполнения задач, отличных от просмотра текстовых файлов: он не блокирует просматриваемый файл.
Это делает ее отличной программой для просмотра и даже копирования файлов журналов, заблокированных другой программой.
Здесь просмотр будет очевиден, а как насчет копирования? Взгляните на пример:
ТИП logfile.log > logfile.bak
Без перенаправления на logfile.bak содержимое logfile.log отображалось бы на экране.
Однако из-за перенаправления это содержимое теперь будет храниться в logfile.bak.
Таким образом, содержимое файла logfile.bak будет идентично содержимому файла logfile.log, но с другой отметкой времени.
Это может быть полезно, если вам нужно скопировать текстовый файл, который может использоваться, когда КОПИРОВАТЬ
может не получиться.
Удалить строку из текстового файла
Этот пример демонстрирует комбинированное использование TYPE и FIND для удаления строки из файла ASCII (предупреждение : только настоящая DOS ):
ТИП C:\CONFIG. SYS | НАЙТИ /V /I "SHARE.EXE" > C:\CONFIG.SYS
Поскольку мы используем передачу стандартного вывода TYPE на стандартный ввод FIND, содержимое CONFIG.SYS сохраняется в одном или нескольких временных файлах до того, как стандартный вывод FIND снова перезапишет CONFIG.SYS.
Без передачи на стандартный ввод FIND файл CONFIG.SYS был бы открыт TYPE и в то же время был бы перезаписан стандартным выводом TYPE.
Это приведет либо к сообщению об ошибке (если вам повезет), либо к пустому файлу CONFIG.SYS.
Предупреждение: | Этот трюк не всегда работает в многозадачных средах, таких как Windows NT или OS/2! Используя этот трюк, вы можете обнаружить, что в итоге у вас будет пустой файл. Используйте разные имена исходного и целевого файлов, чтобы быть в безопасности. |
Показать размер используемых файлов
Я часто использую TYPE для проверки хода загрузки:
Если вы используете DIR для отображения размеров файлов, загружаемые файлы имеют размер 0 байт.
Используя TYPE один раз для отображения содержимого файла, в следующий раз DIR покажет фактическое количество уже загруженных байтов.
Это не повредит загрузке, так как TYPE никоим образом не блокирует файл.
Используйте TYPE и DIR еще раз, чтобы проверить ход загрузки:
DIR download_in_progress ТИП download_in_progress > NUL DIR download_in_progress
download_in_progress — это имя загружаемого файла.
Преобразование Unicode в ASCII vv
В Windows 2000 и более поздних версиях TYPE предлагает простой способ преобразования файлов Unicode в ASCII:
ТИП MyUnicode.txt > MyASCII.txt
Или, если могут быть задействованы «расширенные» символы ASCII, такие как -
или -
:
СНСР 1252 ТИП unicode.txt > ascii.txt
1252 — наиболее часто используемая кодовая страница для западных языков в Windows 2000 и более поздних версиях.
Используйте другую кодовую страницу для других языков.
До недавнего времени я считал преобразование из ASCII в Unicode более сложным.
Но потом Жак Бенсимон показал мне действительно простым способом:
CMD /U /C ТИП ascii.txt > unicode.txt
Записка от Жака Бенсимона:
Я подумал, что хотел бы указать, что, хотя упомянутый мной метод действительно правильно преобразует символы ANSI в Unicode, результирующий файл (который ровно в два раза больше оригинала) , а не полностью соответствует тому, что кажется стандартом. для текстового файла Unicode (по крайней мере, для Windows):
файл, сохраненный Windows как Unicode (например, Блокнот), имеет 2-байтовый заголовок0xFF 0xFE
в качестве первых двух символов, и я заметил, что некоторые программы, которые ожидают файл Unicode (например, файл пользовательского словаря в Office 2007), не будут принимать «голый» файл Unicode без этого заголовка.Простой способ позаботиться об этом (при необходимости) — сначала создать и хранить где-нибудь пустой текстовый файл Unicode (назовем его UniHeader.txt), состоящий из только из двух рассматриваемых байтов (просто создайте пустой текстовый файл и сохраните его как Unicode, используя Блокнот для достижения этой цели).
С этого момента, когда вы хотите преобразовать текстовый файл ANSI в «настоящий» текстовый файл Unicode, вы можете использовать следующие две команды:
КОПИЯ /Y UniHeader.txt Unicode_Output.txt
CMD /U /C Тип ANSI_Input.txt >> Unicode_Output.txtПросто вариант исходной темы, но при этом создается выходной файл, размер которого в два раза больше исходного размера + 2.
Лично я предпочитаю «автономный» пакетный файл, которому не нужен вспомогательный файл, поэтому я немного изменил идею Жака:
> Unicode_Output.txt ECHO.▌■ CMD /U /C Тип ANSI_Input.txt >> Unicode_Output. txt
Обратите внимание на ▌■
в конце первой командной строки: они представляют собой 2 символа, упомянутых Жаком.
Это не настоящие символы, поскольку они не могут отображаться на веб-странице: см. Примечание 2!
Не каждый редактор позволит вставить 2 обязательных символа, но любой специализированный редактор программирования/сценариев позволит.
Жаль, что это решение добавляет дополнительный возврат каретки/перевод строки.
Жак снова нашел решение:
Если неродная утилита Windows разрешена, echo.exe (порт версии echo для Unix) может отображать произвольные символы (указанные как восьмеричные значения) и необязательно может выводить какие-либо конечные символы новой строки (переключатель -n), поэтому вы можете использовать:
echo.exe -n \377\376> Unicode_Output.txt
Файл «.exe» необходим (если вы не переименуете утилиту), чтобы избежать конфликта с внутренней командой
ECHO
.
Вы можете использовать параметр «—help», чтобы увидеть полный синтаксис echo.exe.
Или, если у вас где-то еще есть копия BATCHMAN, вы можете попробовать ее команду CECHO C
:
BATCHMAN CECHO C 07, ▌■> Unicode_Output.txt CMD /U /C Тип ANSI_Input.txt >> Unicode_Output.txt
Или используйте «почти нативную» команду CHOICE (альтернативное решение, также от Жака Бенсимона):
ВЫБОР /N /M ▌■ < NUL 2> NUL > Unicode_Output.txt
Имейте в виду, однако, что CHOICE вставит лишний пробел.
Спасибо Жак
Обновление: | Карлос М. блестяще решил проблему заголовка Unicode: Без Просмотрите и загрузите его A2U.bat для более подробной информации. Спасибо Карлос | |
Примечания: | (1) | Чтобы сохранить и восстановить исходную кодовую страницу, используйте эту команду перед изменением кодовой страницы: или, если ваша версия Windows добавляет точку в конце вывода , а затем используйте следующую команду для последующего восстановления исходной кодовой страницы: |
(2) | Несмотря на то, что TYPE успешно используется для преобразования в ASCII или Unicode на многих компьютерах, сообщалось, что иногда он дает сбой. Эта ошибка может быть вызвана копированием пакетного кода с этой веб-страницы вместо загрузки ZIP-файлов, содержащих этот код. Существует НИКАК для правильного отображения символов ASCII 0xFF и 0xFE, необходимых для метки порядка байтов, на веб-странице. | |
(3) | Если вы один из тех немногих «счастливчиков», которые до сих пор не могут заставить это работать, загрузите и используйте вместо них ASCII2Uc.vbs (или ASCII2Uc.bat) и Txt2ASCI.vbs: |
Преобразование «одиночных» переводов строки в пары CR/LF
В Windows NT и более поздних версиях TYPE в сочетании с MORE предлагает удобный способ преобразования одиночных переводов строки (например, текстовых файлов Unix) в пары возврата каретки/перевода строки:
ТИП input_filename | БОЛЬШЕ /E /P > output_filename
- Определить кодировку файла (Unicode или ASCII)
Последнее изменение страницы: 25.07.2017
Как создать имя файла с датой и временем в пакетном сценарии Windows
Этот учебник поможет вам создать файлы и каталоги с именем текущей даты и времени в системе Windows. Например, вы пишете скрипт, который регулярно создает резервную копию. Теперь вы хотите организовать ежедневное резервное копирование с текущим именем даты и времени, чтобы было легче определить, в какой папке находятся резервные копии какой даты.
Реклама
Давайте пройдемся по учебнику и поймем, как это сделать.
Получить дату и время в пакетном сценарии
Windows принимает дату в формате, например Сб 15/04/2023 . Поэтому используйте следующие команды, чтобы извлечь дату в формате YYYY , месяц в формате MM и дату в формате DD и сохранить в переменных CUR_YYYY , CUR_MM и CUR_DD соответственно.
установить CUR_YYYY=%дата:~10,4%
установить CUR_MM=%дата:~4,2%
set CUR_DD=%date:~7,2%
set CUR_YYYY=%date:~10,4% set CUR_MM=%date:~4,2% set CUR_DD=%date:~ 7,2% |
Далее необходимо проанализировать время, которое доступно в формате 14:53:06.80 (часы, минуты, секунды и микросекунды). Теперь извлеките часы, минуты, секунды и микросекунды и сохраните их в переменных.
установить CUR_HH=%время:~0,2%
если %CUR_HH% меньше 10 (установить CUR_HH=0%время:~1,1%)
установить CUR_NN=%время:~3,2%
установить CUR_SS=%время:~6,2%
установить CUR_MS=%время:~9,2%
1 2 3 4 5 6 |
Теперь у вас есть переменные с текущей датой и временем в переменных. Вы можете использовать и создавать любое имя файла в соответствии с вашими требованиями, например:
установить SUBFILENAME=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%
каталог %SUBFILENAME%
эхо «Добро пожаловать!» > example_%SUBFILENAME%.log
set SUBFILENAME=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS% mkdir %SUBFILENAME% 9000 3 эхо «Добро пожаловать!» > example_%SUBFILENAME%. log |
Если ваша текущая дата и время 15 апреля 2023 14:53:06 , то в приведенном выше примере будет создан файл в текущем каталоге с именем 9.0041 «example_20230415-145306.log» .
Пример пакетного сценария с датой и временем
Полный пакетный сценарий Windows будет выглядеть, как показано ниже. Чтобы проверить это, создайте файл script.bat со следующим содержимым.
эхо выключено
установить CUR_YYYY=%дата:~10,4%
установить CUR_MM=%дата:~4,2%
установить CUR_DD=%дата:~7,2%
установить CUR_HH=%время:~0,2%
если %CUR_HH% меньше 10 (установить CUR_HH=0%время:~1,1%)
установить CUR_NN=%время:~3,2%
установить CUR_SS=%время:~6,2%
установить CUR_MS=%время:~9,2%
установить SUBFILENAME=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%
каталог %SUBFILENAME%
эхо «Добро пожаловать!» > access_%SUBFILENAME%.log
1 2 3 4 5 6 7 эхо-сигнал off set CUR_YYYY=%date:~10,4% set CUR_MM=%date:~4,2% set CUR_DD=%date:~7,2% set CUR_HH=%time:~0 ,2% если %CUR_HH% меньше 10 (установить CUR_HH=0%time:~1,1%)
установить CUR_NN=%time:~3,2% установить CUR_SS=%time:~6,2% установить CUR_MS=%time:~9,2% CUR_SS% mkdir %SUBFILENAME% echo «Добро пожаловать!» > access_%SUBFILENAME%. |