Вспомогательный материал к составлению простейших 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 разобраны в следующей части.