Автор: Пользователь скрыл имя, 15 Декабря 2012 в 10:30, лабораторная работа
Написать batсh-файлы, которые реализуют:
1) перенос всех файлов из одной директории в другую;
2) перенос всех файлов с расширением .txt из одной директории в другую;
3) удаление всех файлов с расширением .txt из заданной директории;
4) перенос всех файлов из одной директории в другую по маске, указанной в параметрах файла;
Федеральное государственное автономное
образовательное учреждение
высшего профессионального образования
«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Космических и информационных технологий
Институт
Информатики и вычислительной техники
кафедра
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №1
«Работа с директориями в batch-файлах»
Преподаватель
Студент КИ10-08 031014456 11.12.12 К.В. Васильев
Красноярск 2012
Написать 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\\*.
}
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\\*.
}
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\\*."+
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\\"+
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\\"+
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+"\\*
system(cmd_str.c_str());
}
9) Для того чтобы копировать все файлы с расширением .txt заданной директории в один новый файл, используем опять же команду Copy в следующей интерпретации:
@echo off
copy C:\WORK\OS\TEST\dir1 C:\WORK\OS\TEST\RESULT\File1.
@pause
Листинг программы, реализующей функцию в С++:
#include <windows.h>
int main()
{
system("copy C:\\WORK\\OS\\TEST\\dir1\\*.* C:\\WORK\\OS\\TEST\\RESULT\\
}
10) Для того чтобы все файлы одного типа из заданной директории скопировать в один файл, а другого типа в другой файл, необходимо воспользоваться командой Copy следующим образом:
@echo off
copy C:\WORK\OS\TEST\dir1\*.txt C:\WORK\OS\TEST\RESULT\File1.
copy C:\WORK\OS\TEST\dir1\*.doc C:\WORK\OS\TEST\RESULT\File2.
@pause
Листинг программы, реализующей функцию в С++:
#include <windows.h>
int main()
{
system("copy C:\\WORK\\OS\\TEST\\dir1\\*.
system("copy C:\\WORK\\OS\\TEST\\dir1\\*.
}
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….).