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«черная дыра» для того, чтобы «спрятать» вывод команды
ECHOechoвывод (в Bash имеет большое число опций)
ECHO.echoвывод пустой строки
ECHO OFFset +vне выводить последующие команды
FOR %%VAR IN (LIST) DOfor var in [list]; doцикл «for»
:LABELэквивалент отсутствует (нет необходимости)метка
GOTOэквивалент отсутствует (используйте функции)переход по заданной метке
PAUSEsleepпауза, или ожидание, в течение заданного времени
CHOICEcase или selectвыбор из меню
IFifусловный оператор if
IF EXIST FILENAMEif [ -e filename ]проверка существования файла
IF !%N==!if [ -z «$N» ]Проверка: параметр «N» отсутствует
CALLsource или . (оператор «точка»)«подключение» другого сценария
COMMAND /Csource или . (оператор «точка»)«подключение» другого сценария (то же, что и CALL)
SETexportустановить переменную окружения
SHIFTshiftсдвиг списка аргументов уомандной строки влево
SGN-lt или -gtзнак (целого числа)
ERRORLEVEL$?код завершения
CONstdin«консоль» (stdin)
PRN/dev/lp0устройство принтера
LPT1/dev/lp0устройство принтера
COM1/dev/ttyS0первый последовательный порт

Пакетные файлы обычно содержат вызовы команд DOS. Они должны быть заменены эквивалентными командами Unix.

Таблица J-2. Команды DOS и их эквиваленты в Unix

Команды DOSЭквивалент в UnixОписание
ASSIGNlnссылка на файл или каталог
ATTRIBchmodизменить атрибуты файла (права доступа)
CDcdсменить каталог
CHDIRcdсменить каталог
CLSclearочистить экран
COMPdiff, comm, cmpсравнить файлы
COPYcpскопировать файл
Ctl-CCtl-Cпрервать исполнение сценария
Ctl-ZCtl-DEOF (конец-файла)
DELrmудалить файл(ы)
DELTREErm -rfудалить каталог с подкаталогами
DIRls -lвывести содержимое каталога
ERASErmудалить файл(ы)
EXITexitзавершить текущий процесс
FCcomm, cmpсравнить файлы
FINDgrepнайти строку в файлах
MDmkdirсоздать каталог
MKDIRmkdirсоздать каталог
MOREmoreпостраничный вывод
MOVEmvпереместить
PATH$PATHпуть поиска исполняемых файлов
RENmvпереименовать (переместить)
RENAMEmvпереименовать (переместить)
RDrmdirудалить каталог
RMDIRrmdirудалить каталог
SORTsortотсортировать файл
TIMEdateвывести системное время
TYPEcatвывести содержимое файла на stdout
XCOPYcp(расширенная команда) скопировать файл

Фактически, команды и операторы командной оболочки 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.


основы и примеры пакетных скриптов · GitHub

## список доступных переменных окружения
НАБОР
#Полезные динамические переменные
%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

Иногда это немного сложно заставить работать, поэтому вот несколько примеров:

 @ЭХО ВЫКЛ.