BAT

BAT

Нам осталось только сложить все в месте. Пишем backup.bat:

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

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

14_1.gif (21388 b)

Вся идея в том, что последний BAT файл, который мы запускаем формируется динамически. А весь код, который нужно выполнить пишется в Start.bat. Если Вы хотите, чтобы копирование производилось на сервер, используйте UNC пути (см. "Шаг 18 - Universal Naming Convention - UNC"). Вот, например, BAT файл, который у меня работает.

mkdir \\Servers\work\%1
copy *.* \\Servers\work\%1

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

 

Одним из недостатков BAT файлов является то, что в результате работы какой-то программы мы не можем получить ее результат, кроме кода возврата. Ну, например, мы хотим, чтобы при запуске BAT файла производилось резервное копирование в папочку. Это мы можем сделать, а вот как сделать так, чтобы имя папки формировалось в соответствии с текущей датой. Умея немного программировать для DOS это можно сделать. Напишем программу Times.exe, которая будет записывать в указанный файл текущую дату. Я использовал Borland C++ 3.1, Вы можете использовать все, что может делать программы в формате MS DOS. Вот код.

#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)
{
printf(argv[1]);
printf(" ");
printf(argv[2]);
printf(" ");
buffer[rez]=0;
printf(buffer);
printf("\n");
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 находится в проекте. Использовать его достаточно легко, надо создавать BAT файл, в котором передается параметр.

times.exe times.txt

В результате работы будет создан текстовый файл, в котором находится текущая дата.

12_1.gif (3615 b)

 

В прошлом примере мы посмотрели IF, но как нам поступать, если нужно выполнить больше чем одну команду? Вот тут нам поможет GOTO.

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

Эта команда переводит выполнение Bat-файла на указанную метку. Давайте переделаем прошлый пример на вывод нескольких строк в зависимости от параметров.

echo off
cls
if "%1"=="A" GOTO ACOM
if "%1"=="E" GOTO ECOM

:ACOM
echo This is
echo Parametrs A
echo God Bay !
GOTO ENDS

:ECOM
echo This is
echo Parametrs E
echo God Bay !

:ENDS

Запускаем.

9_1.gif (3560 b)

Посмотрите, что будет, если передан параметр B.

 

Команда FORFILES является удобным средством выполнения заданных команд для группы файлов в пакетных заданиях.

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

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