Работа с директориями в batch-файлах

Автор: Пользователь скрыл имя, 15 Декабря 2012 в 10:30, лабораторная работа

Краткое описание

Написать batсh-файлы, которые реализуют:
1) перенос всех файлов из одной директории в другую;
2) перенос всех файлов с расширением .txt из одной директории в другую;
3) удаление всех файлов с расширением .txt из заданной директории;
4) перенос всех файлов из одной директории в другую по маске, указанной в параметрах файла;

Файлы: 1 файл

report(Lab1).doc

— 58.50 Кб (Скачать)

Федеральное государственное  автономное

образовательное учреждение

высшего профессионального  образования

«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ  УНИВЕРСИТЕТ»

 

Космических и информационных технологий

Институт

 

Информатики и вычислительной техники

кафедра

 

 

 

 

 

 

 

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №1

 

«Работа с директориями в batch-файлах»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Преподаватель                                   11.12.12    Д.А. Швец

                                                                                        

 

        Студент   КИ10-08      031014456     11.12.12    К.В. Васильев

                                     

 

 

 

 

 

Красноярск 2012

  1. Постановка задачи

 

Написать batсh-файлы, которые реализуют: 
1) перенос всех файлов из одной директории в другую; 
2) перенос всех файлов с расширением .txt из одной директории в другую; 
3) удаление всех файлов с расширением .txt из заданной директории; 
4) перенос всех файлов из одной директории в другую по маске, указанной в параметрах файла; 
5) удаление файлов по маске; 
6) копирование файла с заданным первым параметром в директорию,  заданную вторым параметром; 
7) удаление всех файлов в заданной директории; 
8) удаление всех файлов заданной директории с параметром «маска файла»; 
9) копирование всех файлов заданной директории в один новый файл; 
10) копирование всех файлов одного типа из заданной директории в один файл, другого типа в другой файл; 
11) вывод на экран списка всех файлов из директории заданной аргументом.

Реализовать задание на языке C++, используя компилятор MinGW.

Сравнить исходные коды и сделать вывод о преимуществе скриптов перед кодом на языке высшего уровня или об обратном.

 

 

 

 

 

 

 

 

 

 

 

2. Ход решения

Создадим Batch-файл AUTOCOMPLETE с автоматическим созданием директорий и автоматическим наполнением этих директорий файлами разного типа.

@echo off

if exist dir1\   rd /s /q dir1

if exist dir2\   rd /s /q dir2

if exist RESULT\ rd /s /q RESULT

md dir1 dir2 RESULT

set string1="file1.txt" "file2.txt" "file3.doc" "file4.doc" "f2.txt"

for %%i in (%string1%) do echo.The running environment supports at least FOPEN_MAX files open simultaneously.>"dir1\%%~i"

set string2="file1.txt" "file2.txt" "file3.doc" "file4.doc" "f1.txt"

for %%a in (%string2%) do echo.According to Stroustrup:the name signifies the evolutionary nature...>"dir2\%%~a"

Где dir1 и dir2 - директории для обработки файлов, а RESULT – директория для занесения результатов программ. 

 

Создадим Batch-файл.

Параллельно разработаем программу на языке С++:

 

1) Для переноса файлов одной директории в другую используется команда Move:

@echo off

move C:\WORK\OS\TEST\dir1\*.* C:\WORK\OS\TEST\RESULT

@pause

  Листинг программы, реализующей функцию на С++:

#include <windows.h>

int main()

{

system("move C:\\WORK\\OS\\TEST\\dir1\\*.* C:\\WORK\\OS\\TEST\\RESULT");

}

2) Для того чтобы перенести все файлы с заданным расширением в другую директорию также используется команда Move, но в данном случае с уточнением необходимого нам расширения:

@echo off

move C:\WORK\OS\TEST\dir1\*.txt C:\WORK\OS\TEST\RESULT

@pause

Листинг программы, реализующей функцию на С++:

#include <windows.h>

int main()

{

system("move C:\\WORK\\OS\\TEST\\dir1\\*.txt C:\\WORK\\OS\\TEST\\RESULT");

}

 

3) Для удаления всех файлов с расширением .txt из данной директории необходимо воспользоваться командой del в следующей форме:

@echo off

del C:\WORK\OS\TEST\dir1\*.txt

@pause

Листинг программы, реализующей функцию на С++:

#include <windows.h>

int main()

{

system("del C:\\WORK\\OS\\TEST\\dir1\\*.txt");

}

 

4) Чтобы перенести все файлы из одной директории в другую по маске, указанной в параметрах файла, используем данную форму:

 

@echo off

if "%~1"=="" (echo Not specified Param& goto :eof)

move C:\WORK\OS\TEST\dir1\*.%1 C:\WORK\OS\TEST\RESULT

@pause

Листинг программы, реализующей функцию на С++:

#include <iostream>

#include <string>

#include <windows.h>

using namespace std;

int main(int argc, char ** argv)

{

if ( argc != 2 ) {

cout << "Not specified" << endl;

return 0;

}

string prm=argv[1], cmd_str="move C:\\WORK\\OS\\TEST\\dir1\\*."+prm+" C:\\WORK\\OS\\TEST\\RESULT";

system(cmd_str.c_str());

}

5) Чтобы удалить файлы по заданной маске используем данную форму:

@echo off

if "%~1"=="" (echo Not specified Param& goto :eof)

del C:\WORK\OS\TEST\dir1\%1

@pause

Листинг программы, реализующей функцию на С++:

#include <iostream>

#include <string>

#include <windows.h>

using namespace std;

int main(int argc, char ** argv)

{

if ( argc != 2 ) {

cout << "Not specified" << endl;

return 0;

}

string prm=argv[1], cmd_str = "del C:\\WORK\\OS\\TEST\\dir1\\"+prm;

system(cmd_str.c_str());

}

6) Для того чтобы копировать файл с заданным первым параметром в директорию с заданным вторым параметром используем команду copy. В качестве параметра используем  путь к файлу:

@echo off

if "%~1"=="" (echo Not specified Param1& goto :eof)

if "%~2"=="" (echo Not specified Param2& goto :eof)

copy C:\WORK\OS\TEST\dir1\%1 C:\WORK\OS\TEST\%2

@pause

Листинг программы, реализующей функцию на С++:

#include <iostream>

#include <string>

#include <windows.h>

using namespace std;

int main(int argc, char ** argv)

{

if ( argc != 3) {

cout << "Not specified" << endl;

return 0;

}

string prm1=argv[1], prm2=argv[2], cmdstr = "copy C:\\WORK\\OS\\TEST\\dir1\\"+prm1+" C:\\WORK\\OS\\TEST\\"+prm2;

system(cmdstr.c_str());

}

7)Чтобы удалить все файлы в заданной параметрами директории, воспользуемся командой del:

@echo off

del C:\WORK\OS\TEST\dir1\*.* /q

@pause

Листинг программы, реализующей функцию на С++:

#include <windows.h>

int main()

{

system("del C:\\WORK\\OS\\TEST\\dir1\\*.* /q");

}

8) Чтобы удалить все  файлы заданной директории используем команду Del c заданным параметром:

@echo off

if "%~1"=="" (echo Not specified Param& goto :eof)

del C:\WORK\OS\TEST\%1\*.* /q

@pause

Листинг программы, реализующей функцию на С++:

#include <iostream>

#include <string>

#include <windows.h>

using namespace std;

int main(int argc, char ** argv)

{

if ( argc != 2 ) {

cout << "Not specified" << endl;

return 0;

}

string prm=argv[1], cmd_str="del C:\\WORK\\OS\\TEST\\"+prm+"\\*.* /q";

system(cmd_str.c_str());

}

9) Для того чтобы копировать все файлы с расширением .txt заданной директории в один новый файл, используем опять же команду Copy в следующей интерпретации:

@echo off

copy C:\WORK\OS\TEST\dir1 C:\WORK\OS\TEST\RESULT\File1.txt

@pause

Листинг программы, реализующей функцию в С++:

#include <windows.h>

int main()

{

system("copy C:\\WORK\\OS\\TEST\\dir1\\*.* C:\\WORK\\OS\\TEST\\RESULT\\File1.txt");

}

10) Для того чтобы все файлы одного типа из заданной директории скопировать в один файл, а другого типа в другой файл, необходимо воспользоваться командой Copy следующим образом:

@echo off

copy C:\WORK\OS\TEST\dir1\*.txt C:\WORK\OS\TEST\RESULT\File1.txt

copy C:\WORK\OS\TEST\dir1\*.doc C:\WORK\OS\TEST\RESULT\File2.txt

@pause

Листинг программы, реализующей функцию в С++:

#include <windows.h>

int main()

{

system("copy C:\\WORK\\OS\\TEST\\dir1\\*.txt C:\\WORK\\OS\\TEST\\RESULT\\File1.txt");

system("copy C:\\WORK\\OS\\TEST\\dir1\\*.doc C:\\WORK\\OS\\TEST\\RESULT\\File2.txt");

}

11) Чтобы вывести на экран список всех файлов из директории, заданной аргументом, необходимо воспользоваться командой dir:

@echo off

if "%~1"=="" (echo Not specified Param1& goto :eof)

if "%~2"=="" (echo Not specified Param2& goto :eof)

dir %1 /A:%2 /O:N

@pause

Листинг части программы, реализующей функцию на С++:

#include <iostream>

#include <string>

#include <windows.h>

using namespace std;

int main(int argc, char ** argv)

{

if ( argc != 3 ) {

cout << "Not specified" <<endl ;

return 0;

}

string prm_1=argv[1], prm_2=argv[2], cmd_str = "dir "+prm_1+" /A:"+prm_2+" /O:N";

system(cmd_str.c_str());}

3. Заключение

В данной лабораторной работе я освоил принципы работы  batch-файла. Реализовал на языке С++ простейшие операции с файлами, такие как копирование, перемещение, удаление и вывод содержимого директории на экран. Также реализовал эти операции используя параметры. Изучил основные команды: echo on(off), rem, echo <сообщение>,  copy, Move, del, передача параметров bat-файлу (%1, %2,…..), циклическое выполнение команд (for …. In….).

 


Информация о работе Работа с директориями в batch-файлах