Bat-программирование для работы с файлами

advertisement
Вспомогательный материал к составлению простейших bat-файлов
и использованию внутренних команд DOS для каталогов и файлов
Часть 2: Применение bat-файлов для выполнения операций с файлами.
Дан разбор одного из вариантов контрольной работы по этой теме…
Текст задания (основные компоненты):
1)
Укажите внутренние команды DOS, с помощью которых выполняются
следующие действия с файлами:
Создание
Копирование
Удаление Переименование
Вывод на экран
Copy con 1.txt Copy c:\1.txt d:
Del 1.txt
Ren c:\1.txt 2.ttt Copy 1.txt con
2)
Составить bat-файл проверки существования дисков, указанных в командной
строке. Если командная строка пуста, то проверить существование всех дисков.
Принцип решения: если есть диск, то в нем есть текущий каталог, в котором файл nul
@echo off Отключаем вывод строк пакетного файла перед их выполнением и чистим
Cls
экран (в дальнейшем предполагаем, что эти строки есть везде)
If ‘%1==’ (
Если нет параметров, то запускаем,
%0 q w e r t y u i o p a s d f g h j k l z x c v b n m
перечислив все буквы от A до Z,
) else (
иначе, проверяем каждый и
:s
даем заключение командой
If exist %1:nul (echo %1–exist) else echo %1–not exist
echo, сдвигая shift – ом %1 по
Shift
командной строке, пока она не
If not ‘%1==’ goto s
окончится
)
3)
Составить пакетный файл, который из папки-источника, указанную первым
параметром, в папку-приемник, указанную вторым параметром, копирует все файлы,
начиная с 3-го параметра. Если указан только источник, то из него все файлы
копируются в текущий каталог текущего диска без проверок, если источник и
приемник, то из источника копируем все файлы в приемник без проверок. В
остальных случаях программа должна обрабатывать следующие ошибочные ситуации:
- нет параметров: сообщить об ошибке
- файла для копирования нет в источнике: сообщить об ошибке
- файл для копирования есть в приемнике: не копировать
If ‘%1==’ (
Обработка ошибки «Нет параметров»
Echo Нет параметров!
) else (
If ‘%2==’ (
Не указан приемник Copy %1\*.*
копируем в текущий
) else (
If ‘%3==’ (
Не указано, какие файлы копировать Copy %1\*.* %2
копируем все…
) else (
Cd %1
Адрес источника делаем текущим,
Set destination=%2
а приемника сохраняем
:s
If not exist %3 (
Echo Нет такого файла в %cd%
) else (
If exist %desination%\%3 goto q
Copy %3 %destination%
)
и обрабатываем ошибку отсутствия файла (к
команде cd обращаемся как к переменной
окружения - получаем путь в текущую папку)
Пропускаем существующий файл,
остальные - копируем
:q
Shift
If not ‘%3==’ goto s
Set destination=
Организуем циклический пробег по списку файлов из
командной строки, пока она не закончится, а затем
удаляем переменную destination
)
)
)
Пакетный файл без обработки частных случаев оценивался оценкой «3»,
обработка случаев отсутствия параметров «+1», случаев отсутствия/наличия файлов
«+1» (всё это только за данный вопрос). Другой способ решения задачи (без
вложенных проверок) также допускался и оценка не снижалась.
Минимальный объем для оценки «3» за этот вопрос:
Cd %1
Set destination=%2
:s
Copy %3 %destination%
Shift
If not ‘%3==’ goto s
4) Использование команд For и Call
Предположим, что необходимо создать набор SUBST – дисков начиная от буквы V
и до конца алфавита, связав каждый из них с одноименным подкаталогом в корне
диска C:. Программа должна обрабатывать следующие ситуации:
 Если такой диск уже есть, то не создавать его и вывести сообщение;
 Если для диска нет каталога, то вывести сообщение, создать его, затем диск
Соответствующий фрагмент bat-файла имеет вид:
Вызов метки :T как bat-файла с параметром %%x
For %%x in (V W X Y Z) do Call :T %%x
Вывод списка Subst – дисков
Subst
Пауза
Pause
Выход из bat-файла
Exit
:T
Если такой диск уже есть, то
If exist %1:nul (
выдать сообщение об этом
Echo Диск %1: уже есть!
иначе
) else (
если нет каталога для связывания, то создать,
If not exist c:\%1\nul md c:\%1
а после – смонтировать Subst - диск
Subst %1: c:\%1
)
Более актуальные примеры использования Call и For разобраны в следующей части.
Download