Работа с дисками, файлами и каталогами.
Задача - определить буквы дисков, присутствующих в системе и записать результат в файл с именем tstdsk.txt текущего каталога. Можно воспользоваться выполнением команды IF EXIST в цикле FOR для набора из букв латинского алфавита, т.е для каждой буквы диска проверить наличие корневого каталога командой IF EXIST буква диска:\ Сначала создаем пустой файл: copy nul tstdsk.txt Это действие необязательно, если файла не существует, но в противном случае, результаты будут дописываться в конец файла, и если в нем уже был список дисков от предыдущего исполнения командного файла, то он удвоится. Команда copy nul tstdsk.txt для существующего файла установит нулевой размер данных, т.е. сделает его пустым. Окончательно, командный файл будет выглядеть следующим образом: copy nul tstdsk.txt Для обработки файлов определенного типа, например любых с расширением .tmp используется маска - *.tmp. Так, для удаления всех файлов *.tmp из каталога C:\TEMP можно воспользоваться командой ERASE (или DEL) ERASE C:\TEMP\*.TMP В масках файлов и каталогов возможно использование частичных имен ERASE C:\TEMP\A*.TMP - удалить все файлы с расширением.TMP, имя которых начинается с символа "A" Задача - получить список всех каталогов с подкаталогами на логическом диске и записать результат в текстовый файл. Для рекурсивной обработки каталогов диска будем использовать команду FOR /R FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры] Ключ /R означает выполнение команды для каталога [диск:]путь. Если в команде путь не задан, то обработка выполняется для текущего каталога. Простой пример удаления файлов с расширением.tmp из каталога C:\TEMP: FOR /R C:\temp\ %%i IN (*.tmp) DO del %%i При выполнении команды возможно использование подстановочных значений переменной цикла для получения имен дисков, папок, файлов и их характеристик. Полный список возможных значений в случае использования переменной с именем i %%~i - из переменной %i удаляются обрамляющие кавычки (") Возможно объединение нескольких операторов: %%~dpi - переменная %i заменяется только на имя диска и путь Значение переменной %%pi внутри цикла команды FOR /R будет последовательно принимать значения путей папок, начиная с заданного набора [диск:]путь. Так же, как и в предыдущем примере, желательно обнулить файл с результатами возможного предыдущего запуска данного командного файла: REM Обнулить / создать файл для хранения списка каталогов C:\dirlist.txt В результате выполнения этого командного файла в корне диска C: будет создан файл dirlist.txt, содержащий список каталогов диска. Если в цикле команды FOR /R используются подстановочные значения переменной %%I, то в качестве набора (in) не стоит использовать символ точки. Задача - найти на диске файлы с расширением.log и скопировать их в каталог на другом логическом диске - D:\MUSOR Желательно проверить наличие каталога D:\MUSOR и при необходимости, создать его командой md, а также удалить из него все файлы, если они существуют, командой del. Затем выполнить переход в корневой каталог диска C: и выполнить в цикле команды FOR поиск файлов по маске *.log во всех подкаталогах. REM подготовить каталог D:\MUSOR Практика использования FOR /R показала, что не стоит использовать в качестве набора для обработки символ "точка" (конструкция in (.)), поскольку при использовании подстановочных значений, можно получить возврат из текущего каталога на уровень выше. В данном примере в качестве набора in используется любой не служебный символ. Команду копирования (copy) можно заменить на команду перемещения файлов (MOVE), что приведет к удалению файлов источников после копирования в каталог D:\MUSOR. Пример с копированием файлов с расширением.log рассмотренный выше имеет некоторые существенные недостатки - не обрабатываются скрытые файлы и папки, и в конечном каталоге, куда копируются файлы (D:\MUSOR) не создаются подкаталоги с теми же именами, которые принадлежат путям исходных копируемых файлов. Для устранения этих недостатком можно использовать немного другой скрипт: @echo off Для копирования используется команда xcopy с ключами: /H - копировать скрытые файлы. Подсказку по использованию команды XCOPY можно получить при вводе: При обработке строки xcopy "%%~dpi*.log" "D:\MUSOR%%~pi*.*" /H /R /Q /Y в цикле FOR, в качестве источника копирования будет выбираться C:\текущий путь\*.log а в качестве приемника - D:\MUSOR\текущий путь\имя копируемого файла Похожий подход можно использовать для обнаружения и копирования исполняемых файлов (*.exe) из каталога временных файлов, задаваемого переменной TEMP. Бывает полезно для поиска вредоносных программ. rem @echo off При работе с содержимым каталогов удобно использовать команды запоминания текущего каталога и перехода в новый PUSHD и команды восстановления ранее запомненного текущего каталога POPD PUSHD "%TEMP%" Яндекс.ДиректИщете бытовую технику? Воспользуйтесь Яндекс.Маркетом. Поиск по параметрам. Отзывы. Выбирайте!market.yandex.ru
|