Bat примеры файлов: Написание bat файлов — примеры батников | Info-Comp.ru
Содержание
Приложение J. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки | ABS Guide
Большое число программистов начинало изучать скриптовые языки на PC, работающих под управлением DOS. Даже на этом «калеке» удавалось создавать неплохие сценарии, хотя это и требовало значительных усилий. Иногда еще возникает потребность в переносе пакетных файлов DOS на платформу Unix, в виде сценариев командной оболочки. Обычно это не сложно, поскольку набор операторов, доступных в DOS, представляет из себя ограниченное подмножество эквивалентных команд, доступных в командной оболочке.
Таблица J-1. Ключевые слова/переменные/операторы пакетных файлов DOS и их аналоги командной оболочки
Операторы пакетных файлов | Эквивалентные команды в Unix | Описание |
---|---|---|
% | $ | префикс аргументов командной строки |
/ | — | признак ключа (опции) |
\ | / | разделитель имен каталогов в пути |
== | = | (равно) сравнение строк |
!==! | != | (не равно) сравнение строк |
| | | | конвейер (канал) |
@ | set +v | не выводить текущую команду |
* | * | «шаблонный символ» в имени файла |
> | > | перенаправление (с удалением существующего файла) |
>> | >> | перенаправление (с добавлением в конец существующего файла) |
< | < | перенаправление ввода stdin |
%VAR% | $VAR | переменная окружения |
REM | # | комментарий |
NOT | ! | отрицание последующего условия |
NUL | /dev/null | «черная дыра» для того, чтобы «спрятать» вывод команды |
ECHO | echo | вывод (в Bash имеет большое число опций) |
ECHO. | echo | вывод пустой строки |
ECHO OFF | set +v | не выводить последующие команды |
FOR %%VAR IN (LIST) DO | for var in [list]; do | цикл «for» |
:LABEL | эквивалент отсутствует (нет необходимости) | метка |
GOTO | эквивалент отсутствует (используйте функции) | переход по заданной метке |
PAUSE | sleep | пауза, или ожидание, в течение заданного времени |
CHOICE | case или select | выбор из меню |
IF | if | условный оператор if |
IF EXIST FILENAME | if [ -e filename ] | проверка существования файла |
IF !%N==! | if [ -z «$N» ] | Проверка: параметр «N» отсутствует |
CALL | source или . (оператор «точка») | «подключение» другого сценария |
COMMAND /C | source или . (оператор «точка») | «подключение» другого сценария (то же, что и CALL) |
SET | export | установить переменную окружения |
SHIFT | shift | сдвиг списка аргументов уомандной строки влево |
SGN | -lt или -gt | знак (целого числа) |
ERRORLEVEL | $? | код завершения |
CON | stdin | «консоль» (stdin) |
PRN | /dev/lp0 | устройство принтера |
LPT1 | /dev/lp0 | устройство принтера |
COM1 | /dev/ttyS0 | первый последовательный порт |
Пакетные файлы обычно содержат вызовы команд DOS. Они должны быть заменены эквивалентными командами Unix.
Таблица J-2. Команды DOS и их эквиваленты в Unix
Команды DOS | Эквивалент в Unix | Описание |
---|---|---|
ASSIGN | ln | ссылка на файл или каталог |
ATTRIB | chmod | изменить атрибуты файла (права доступа) |
CD | cd | сменить каталог |
CHDIR | cd | сменить каталог |
CLS | clear | очистить экран |
COMP | diff, comm, cmp | сравнить файлы |
COPY | cp | скопировать файл |
Ctl-C | Ctl-C | прервать исполнение сценария |
Ctl-Z | Ctl-D | EOF (конец-файла) |
DEL | rm | удалить файл(ы) |
DELTREE | rm -rf | удалить каталог с подкаталогами |
DIR | ls -l | вывести содержимое каталога |
ERASE | rm | удалить файл(ы) |
EXIT | exit | завершить текущий процесс |
FC | comm, cmp | сравнить файлы |
FIND | grep | найти строку в файлах |
MD | mkdir | создать каталог |
MKDIR | mkdir | создать каталог |
MORE | more | постраничный вывод |
MOVE | mv | переместить |
PATH | $PATH | путь поиска исполняемых файлов |
REN | mv | переименовать (переместить) |
RENAME | mv | переименовать (переместить) |
RD | rmdir | удалить каталог |
RMDIR | rmdir | удалить каталог |
SORT | sort | отсортировать файл |
TIME | date | вывести системное время |
TYPE | cat | вывести содержимое файла на stdout |
XCOPY | cp | (расширенная команда) скопировать файл |
Фактически, команды и операторы командной оболочки Unix имеют огромное количество дополнительных опций, расширяющих их функциональность, по сравнению с их эквивалентами в DOS. В большинстве своем, пакетные файлы DOS предполагают наличие вспомогательных утилит, таких как ask.com («увечный» аналог Unix-вого read). DOS поддерживает крайне ограниченный набор шаблонных символов, учавствующих в операциях подстановки имен файлов, распознавая только два символа — * и ?. |
Преобразование пакетных файлов DOS в сценарии командной оболочки, обычно не вызывает затруднений, а результат такого преобразования читается гораздо лучше, чем оригинал.
Пример J-1. VIEWDATA.BAT: пакетный файл DOS
REM VIEWDATA REM INSPIRED BY AN EXAMPLE IN "DOS POWERTOOLS" REM BY PAUL SOMERSON @ECHO OFF IF !%1==! GOTO VIEWDATA REM IF NO COMMAND-LINE ARG... FIND "%1" C:\BOZO\BOOKLIST.TXT GOTO EXIT0 REM PRINT LINE WITH STRING MATCH, THEN EXIT. :VIEWDATA TYPE C:\BOZO\BOOKLIST.TXT | MORE REM SHOW ENTIRE FILE, 1 PAGE AT A TIME. :EXIT0
Результат преобразования в сценарий командной оболочки, немного улучшенный.
Пример J-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки
#!/bin/bash # Результат преобразования пакетного файла VIEWDATA.BAT в сценарий командной оболочки. DATAFILE=/home/bozo/datafiles/book-collection.data ARGNO=1 # @ECHO OFF Эта команда здесь не нужна. if [ $# -lt "$ARGNO" ] # IF !%1==! GOTO VIEWDATA then less $DATAFILE # TYPE C:\MYDIR\BOOKLIST.TXT | MORE else grep "$1" $DATAFILE # FIND "%1" C:\MYDIR\BOOKLIST.TXT fi exit 0 # :EXIT0 # операторы перехода GOTO, метки и прочий "мусор" больше не нужны. # Результат преобразования стал короче, чище и понятнее.
На сайте Тэда Дэвиса (Ted Davis) Shell Scripts on the PC, вы найдете большое число руководств по созданию пакетных файлов в DOS. Определенно, его изобретательность будет вам полезна, при создании ваших сценариев.
windows — Работа с файлами в цикле bat
У меня есть текстовый файл,он содержит строки,мне необходимо поменять местами четные и нечетные строки. Я взял четные и нечетные строки и выписал их в отдельные файлы.
@echo off setlocal EnableDelayedExpansion set "filepath2=C:\\Users\\andyb\\Desktop\\testfile.txt" set "filepath3=C:\\Users\\andyb\\Desktop\\testfile2.txt" set "filepath4=C:\\Users\\andyb\\Desktop\\testfile3.txt" set counter=0 set B=0 for /F %%A in (%filepath2%) do ( set /a B=!counter!%%2 if !B! equ 0 (echo %%A>>%filepath3%) else (echo %%A>>%filepath4%) set /A counter=counter+1 )
Теперь мне нужно брать одну строку из файла с нечетными строками,потом одну строку из файла с четными строками и записывать это в отдельный файл ,я никак не могу понять как в цикле это реализовать,так как переменной цикла присваивается одно значение из одного файла,а мне нужно за одну итерацию взять по строке из двух файлов.
- windows
- строки
- cmd
- bat
1
Не нужно использовать дополнительные файлы. Работайте с одним
@echo off setlocal EnableDelayedExpansion set in_file=1. txt set out_file=2.txt rem //Строка, которая никогда не встретится в файле set null="$$$$$" rem //Предыдущая строка set prev=%null% for /F "tokens=*" %%A in (%in_file%) do ( if "!prev!" == "%null%" ( rem //Если предыдущая строка пустая, то присваиваем текущую set prev=%%A ) else ( rem //Иначе выводим текущую строку echo %%A>>%out_file% rem //выводим предыдущую строку echo !prev!>>%out_file% rem //Очищаем предыдущую строку set prev=%null% ) ) rem //Если в файле нечетное количество строк, то выводим предыдущую строку if not "!prev!" == "%null%" echo !prev!>>%out_file%
Зарегистрируйтесь или войдите
Регистрация через 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.
## список доступных переменных окружения | |
НАБОР | |
#Полезные динамические переменные | |
%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER% | |
#Переменная окружения %ERRORLEVEL% содержит код возврата последней выполненной программы или скрипта. | |
ЕСЛИ %ERRORLEVEL% NEQ 0 ( | |
REM сделайте что-нибудь здесь, чтобы устранить ошибку | |
) | |
# Чтобы выполнить следующую команду после успеха, мы используем оператор &&: | |
SomeCommand. exe && ECHO SomeCommand.exe успешно выполнен! | |
# Чтобы выполнить последующую команду после сбоя, мы используем || оператор: | |
SomeCommand.exe || Ошибка ECHO SomeCommand.exe с кодом возврата %ERRORLEVEL% | |
# Распространенным методом является использование > для создания/перезаписи файла журнала, а затем использование >> для добавления к файлу журнала. | |
SomeCommand.exe > temp.txt | |
OtherCommand.exe >> temp.txt | |
# Циклический просмотр файлов | |
ДЛЯ %I В (%USERPROFILE%\*) DO @ECHO %I | |
# Циклический просмотр каталогов | |
FOR /D %I IN (%USERPROFILE%\*) DO @ECHO %I | |
# Рекурсивный цикл по файлам во всех подпапках папки %TEMP% | |
FOR /R «%TEMP%» %I IN (*) DO @ECHO %I | |
# Рекурсивный цикл по всем подпапкам в папке %TEMP% | |
FOR /R «%TEMP%» /D %I IN (*) DO @ECHO %I | |
##~ МАГИЯ | |
#Следующий синтаксис правильно заменяется на путь к текущему пакетному скрипту. | |
%~dp0 //путь к текущему пакетному файлу. Заканчивается на «\» | |
установить testtools=%~dp0tools // | |
set testmode=%1 // первый параметр | |
set testtarget=%~f2 // второй параметр (полный путь к файлу) | |
set testtargetdir=%~dp2 // второй параметр (только каталог) | |
#Волшебные переменные %n содержат аргументы, используемые для вызова файла: %0 — путь к самому bat-файлу, %1 — первый аргумент после, %2 — второй и так далее. Поскольку аргументы часто являются путями к файлам, существует дополнительный синтаксис для извлечения частей пути. ~d — диск, ~p — путь (без диска), ~n — имя файла. Их можно комбинировать, так что ~dp — это диск+путь. Таким образом, %~dp0 очень полезен в bat: это папка, в которой находится исполняемый bat-файл. | |
#Вы также можете получить другую метаинформацию о файле: ~t — временная метка, ~z — размер. | |
ЕСЛИ ОТЧЕТ | |
ЕСЛИ СУЩЕСТВУЕТ имя файла … | |
ЕСЛИ %значение% LSS 10 … | |
ЕСЛИ /Я НЕ «%string1%»==»string2» … | |
ЕСЛИ НЕ УРОВЕНЬ ОШИБКИ 1 … | |
ЕСЛИ %1 LSS 10 ( | |
ЕСЛИ %2 GTR 0 ( | |
ECHO %%1 меньше 10 И %%2 больше 0 | |
) | |
) | |
#Оператор Значение | |
ЭКВ равно | |
NEQ не равен | |
LSS менее | |
LEQ меньше или равно | |
ОТР больше | |
GEQ больше или равно | |
#ДЛЯ ЦИКЛА | |
/D Указывает, что набор содержит каталоги. | |
/R Вызывает рекурсивное выполнение команды через подкаталоги указанного родительского каталога | |
/L Повторяет команду, используя начальный, пошаговый и конечный параметры, указанные в наборе. | |
/F Разбирает файлы или выходные данные команды различными способами | |
для %%X в (установить) сделать (команда) | |
для %%X в (файл1 файл2 файл3) выполнить команду | |
Для %%X in (eenie meenie miney moe) do (echo %%X) | |
для %%X в (*.jpg) выполнить команду | |
для %%X в (*. jpg *.gif *.png *.bmp) выполнить команду | |
для /l %%X in (начало, шаг, конец) выполнить команду | |
для /l %%X в (1,1,99) сделать (эхо %%X >> E:\numbers.txt) | |
#Работа со справочниками | |
для /d %%X в (directorySet) выполнить команду | |
для /d %%X в (C:\*) выполнить эхо %%X | |
# Рекурсия по подкаталогам | |
для /r C:\pictures %%X в (*.jpg) делать (эхо %%X >> E:\listjpg.txt) | |
для /f [параметры] %%X в (исходном) команда do | |
#РАЗНОЕ | |
set /p name= Как тебя зовут? // предложить пользователю ввести | |
# для запуска нескольких командных окон | |
for /l %%x in (1, 1, 5) do ( | |
start cmd /c «cd / && dir /s && pause» | |
) | |
#запускать некоторые команды в каждом окне или просто открывать их по заданному пути и с заданным заголовком | |
Код: | |
@echo off | |
запуск %SystemRoot%\system32\calc. exe | |
запуск «» «C:\Program Files\Pidgin\pidgin.exe» | |
запуск «» «C:\Program Files\Mozilla Firefox\firefox.exe» | |
Запустите «инструмент администратора» cmd /k cd «C:\Development\VirtualTradingSystem\clean_trunk\tf-tradeweb» | |
Запустите «temp_pass.py» cmd /k cd «C:\Development\VirtualTradingSystem\clean_trunk\scripts» | |
#удалить все файлы и подпапки | |
@echo off | |
#путь к текущему пакетному файлу. Заканчивается на «\» | |
установить на основеir=%CD% | |
эхо%основание% | |
компакт-диск %CD%\. tmp | |
FOR /D %%p IN («%CD%\*.*») DO rmdir «%%p» /s /q | |
дел %CD%\* /F /Q | |
кд %базир% | |
# Шаги сборки приложения Ionic | |
@echo off | |
изготовление.vbs | |
call ionic build android —release | |
cd платформы\андроид\сборка\выходы\apk | |
C:\Users\JRAPARLA\Desktop\cordovacode\newapp\NexsCard\signing.vbs | |
дель /F /Q nexscard. apk | |
call jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore nexscard.keystore android-release-unsigned.apk «nexscard» -storepass ppv-3333 -keypass ppv-3333 | |
C:\Users\JRAPARLA\Desktop\cordovacode\newapp\NexsCard\packaging.vbs | |
вызов «C:\Program Files (x86)\Android\android-sdk\build-tools\23.0.1\zipalign» -v 4 android-release-unsigned.apk nexscard.apk | |
C:\Users\JRAPARLA\Desktop\cordovacode\newapp\NexsCard\complete.vbs | |
старт. | |
компакт-диск %nexs% | |
Пакетные сценарии Windows | Geoff Does Stuff
Полные примеры
У меня есть несколько примеров готовых сценариев в windows/batch · master · Geoff Lawrence / Geoff Does Stuff · GitLab, которые показывают несколько вещей, работающих вместе.
Скрытие вывода
В Windows вы скрываете вывод команды, перенаправляя вывод на nul, вы также можете отдельно направлять сообщения об ошибках на nul. О, и прежде чем вы спросите, это всего одна L. Например:
dir > nul
dirmissingfile 2> nul
dir > nul 2> nul
Небольшой эксперимент с вышеизложенным поможет. Вы также можете перенаправить вывод ошибок (stderr или «2») в обычный вывод (stdout) следующим образом:
dir > listing.txt 2>&1
Однако обратите внимание, что в «2>&1» не может быть пробела.
Передача аргументов
Если вы хотите обработать аргументы командной строки, переданные вашему пакетному сценарию, вам необходимо проверить переменные %1, %2 и т. д.
Стандартные переменные
Существует ряд стандартных переменных, некоторые из которых менее просты/очевидны, например, %~dp0
! Итак, давайте немного разберем это: «%~» — это специальная клавиша, с которой мы начинаем, «d» — буква драйвера, «p» — путь, а 0 (ноль) означает сам файл сценария. Итак, создайте следующее в «C:\Temp\TestScript.cmd»
@ECHO OFF
Путь сценария ECHO: %~dp0
Короткий путь сценария ECHO: %~dps0
Диск сценария ECHO: %~d0
Папка сценария ECHO: %~p0
Имя сценария ECHO: %~nx0
Имя и расположение сценария ECHO: %~dpnx0
Это сгенерирует следующий вывод
Путь сценария: C:\Temp\
Короткий путь сценария: C:\Temp\
Диск сценария: C:
Папка сценария: \Temp\
Имя сценария: TestScript.cmd
Имя и расположение сценария: C:\Temp\TestScript .cmd
«s» означает использование имен путей 8.3, которые не отображаются в этом примере, но переместите файл на рабочий стол и повторите попытку, возможно, добавив паузу
в конце, чтобы окна не закрылись, прежде чем вы сможете прочитать ее. Вы можете получить дополнительную информацию, выполнив для /?
в командной строке или прочитав Microsoft Windows XP — использование пакетных параметров.
Оператор IF
Иногда это немного сложно заставить работать, поэтому вот несколько примеров:
@ЭХО ВЫКЛ.