BAT

BAT

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

echo off
cls
echo start backup
mkdir backup
copy *.* backup
echo end backup

Запускаем.

Первая программа BAT (рис. 1)

И смотрим в проводнике:

Первая программа BAT (рис. 2)

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

 

Вызывая из командной строки bat файл:

Обработка параметров BAT (рис.1)

или из другого файла:

call 6.bat 18012002

Внутри этого BAT файла Вы можно обработать параметры. Для получения параметра мы должны использовать символ % и номер параметра. MS DOS заменит эту конструкцию переданным параметром. Давайте пробовать:

echo off
cls
echo start backup
mkdir %1
copy *.* %1
echo end backup

Запускаем.

Обработка параметров BAT (рис.2)

И результат.

Обработка параметров BAT (рис.3)

 

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

call    Вызов одного пакетного файла из другого.
echo Вывод сообщений и переключение режима отображения команд на экране.
for Запуск указанной команды для каждого из файлов в наборе.
goto Передача управления в отмеченную строку пакетного файла.
if Оператор условного выполнения команд в пакетном файле.
pause Приостановка выполнения пакетного файла и вывод сообщения
rem Помещение комментариев в пакетные файлы и файл CONFIG.SYS.
shift Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла.

Кстати Вы можете легко получить подсказку по каждой этой команде в сеансе MS DOS используя ключ /?

команды bat

 

Итак, у нас есть внутренние команды и внешние. После того как в BAT файле находится команда, то сначала проверяется есть ли такая команда внутри command.com. Например echo - это внутренняя команда и исполняет ее command.com. Если же эта команда не найдена, то будет произведен поиск файла с расширением exe или com во всех каталогах указанных в переменной среды PATH. Смотрите на рисунок ниже.

Как работают BAT

Команды echo и cls будут обработаны внутри command.com. А команда edit.com не будет обработана (кстати расширение можно не указывать) раз такой команды нет, то будут исследованы все доступные пути на предмет файлов с таким названием. Если файл будет найдет, то он будет запущен. Это очень важно, так как позволяет нам очень быстро используя простые средства разработки типа Turbo C++ или Turbo Pascal создавать расширения стандартных команд. Сразу скажу, что подобные программы должны создаваться для MS DOS, а современные средства разработки типа Visual C++ 6.0 не умеют создавать эти простенькие программы.

 

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

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

Смотрим пример, который копирует файл на дискету.

echo off
cls
echo insert disk to A:
pause
copy 1.txt a:

В момент выполнения программа остановится.

Использование PAUSE в BAT (рис. 1)

А после нажатия скопируется. Но на экране останется окно.

Использование PAUSE в BAT (рис. 2)

Если Вы не хотите чтобы оно было, вызовите последней командой cls

.....
copy 1.txt a:
cls

И после копирования оно пропадет.

 

 

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

IF [NOT] ERRORLEVEL число команда
IF [NOT] строка1==строка2 команда
IF [NOT] EXIST имя_файла команда

NOT Windows выполняет команду лишь в том случае,
если условие ложно.
ERRORLEVEL число Условие истинно, если последняя запущенная программа
завершилась с кодом возврата, равным либо превышающим
указанное число.
команда Команда, которую следует выполнить в случае
истинности условия.
строка1==строка2 Условие истинно при совпадении обеих строк.
EXIST имя_файла Условие истинно, если указанный файл существует.

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

call 8.bat A

А в командном файле 8.bat напишем условие.

echo off
cls
if "%1"=="A" Attrib.exe
if "%1"=="E" Edit.com

Запускаем.

Использование IF в BAT

Сработала только строка с параметром A.

Команда shift позволяет сдвигать параметры.

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

Параметров может быть много. Например, столько:

call 10.bat Hello Params str 123

Первый параметр - это %0 в нем имя вызываемого bat файла. Давайте проверим.

echo off
cls

echo %0
echo %1
echo %2
echo %3
echo %4
echo -------------------------------
echo shift
echo -------------------------------
shift
echo %0
echo %1
echo %2
echo %3
echo %4

Смотрим результат.

10_1.gif (5992 b)

После вызова все параметры были смещены.

 

Здесь нам может помочь команда CALL:

CALL [диск:][путь]имя_файла [параметры_вызова]
параметры_вызова Параметры командной строки, использующиеся
при вызове пакетного файла.

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

call 5.bat

5_1.gif (854 b)

Запускаем и смотрим.

5_2.gif (4378 b)

И результат тот же.

5_3.gif (1898 b)

 

Для вывода сообщения в BAT файлах используется команда echo:

Вывод сообщений и переключение режима отображения команд на экране.
ECHO [ON | OFF]
ECHO [сообщение]
Ввод ECHO без параметров позволяет выяснить текущий режим отображения команд.

Давайте попробуем создать простой BAT файл:

echo
echo hello batch files

Запускаем.

3_1.gif (6799 b)

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

echo off
echo hello batch files

Запускаем.

3_2.gif (5289 b)

Но первая команда все равно видна. Это можно исправить, сразу вызвав CLS(команда очистки экрана) после отключения режима отображения. CLS это внутренняя команда MS DOS и может вызываться прямо из командной строки.

echo off
cls
echo hello batch files

Запускаем.

3_3.gif (2929 b)

Вот теперь то что надо, почти настоящая программа.

 

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

#include "stdio.h"
#include "process.h"
#include "FCNTL.H"
#include "string.h"
#include "io.h"

int main(int argc, char *argv[ ])
{
printf("First Steps Site(C) 2002\n");
if (argc==4)
{
int ifile;
int ofile;
int rez;
ifile=_open(argv[1],O_RDONLY);
if (ifile!=-1)
{
char buffer[255];
rez=read(ifile,buffer,254);
if (rez!=-1)
{
buffer[rez]=0;
ofile=open(argv[2], O_CREAT | O_WRONLY | O_TRUNC);
if (ofile!=-1)
{
write(ofile,argv[3],strlen(argv[3]));
write(ofile," ",2);
write(ofile,buffer,strlen(buffer));
close(ofile);
}
else
{
printf("error create\n");
return 1;
}
}
else
{
printf("error read\n");
return 1;
}
}
else
{
printf("error open file \n");
return 1;
}
return 0;
}
else
{
printf("error parametrs\n");
return 1;
}
}

Сам код и EXE есть в проекте. Как этим EXE можно воспользоваться ? Смотрите:

runbats.exe times.txt temp.bat  start.bat

Первый параметр - это файл откуда брать строку, второй параметр - это какой BAT файл сформировать, третий параметр - это какой BAT файл вызывать. Результат работы будет такой.

13_1.gif (4033 b)

 

Яндекс.Метрика

По всем вопросам, связанным с сайтом просьба обращаться на e-mail: pontin@mail.ru