Студопедия — Работа с дисками, файлами и каталогами.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Работа с дисками, файлами и каталогами.






Задача - определить буквы дисков, присутствующих в системе и записать результат в файл с именем tstdsk.txt текущего каталога. Можно воспользоваться выполнением команды IF EXIST в цикле FOR для набора из букв латинского алфавита, т.е для каждой буквы диска проверить наличие корневого каталога командой

IF EXIST буква диска:\

Сначала создаем пустой файл:

copy nul tstdsk.txt

Это действие необязательно, если файла не существует, но в противном случае, результаты будут дописываться в конец файла, и если в нем уже был список дисков от предыдущего исполнения командного файла, то он удвоится. Команда copy nul tstdsk.txt для существующего файла установит нулевой размер данных, т.е. сделает его пустым.

Окончательно, командный файл будет выглядеть следующим образом:

copy nul tstdsk.txt
for %%i in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) DO (
if exist %%i:\ echo Disk %%i: exist >> tstdsk.lst
)

Для обработки файлов определенного типа, например любых с расширением .tmp используется маска - *.tmp. Так, для удаления всех файлов *.tmp из каталога C:\TEMP можно воспользоваться командой ERASE (или DEL)

ERASE C:\TEMP\*.TMP
DEL /Q C:\TEMP\*.TMP

В масках файлов и каталогов возможно использование частичных имен

ERASE C:\TEMP\A*.TMP - удалить все файлы с расширением.TMP, имя которых начинается с символа "A"
DIR *u*.* - выдать список всех файлов и подкаталогов текущего каталога, в имени которых содержится символ "u"
DIR C:\*t.* - выдать список всех файлов и каталогов в корне диска C:, имя которых заканчивается символом "t"

Задача - получить список всех каталогов с подкаталогами на логическом диске и записать результат в текстовый файл. Для рекурсивной обработки каталогов диска будем использовать команду FOR /R

FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]

Ключ /R означает выполнение команды для каталога [диск:]путь. Если в команде путь не задан, то обработка выполняется для текущего каталога.

Простой пример удаления файлов с расширением.tmp из каталога C:\TEMP:

FOR /R C:\temp\ %%i IN (*.tmp) DO del %%i

При выполнении команды возможно использование подстановочных значений переменной цикла для получения имен дисков, папок, файлов и их характеристик. Полный список возможных значений в случае использования переменной с именем i

%%~i - из переменной %i удаляются обрамляющие кавычки (")
%%~fi - переменная %i расширяется до полного имени файла
%%~di - из переменной %i выделяется только имя диска
%%~pi - из переменной %i выделяется только путь к файлу
%%~ni - из переменной %i выделяется только имя файла
%%~xi - из переменной %i выделяется расширение имени файла
%%~si - полученный путь содержит только короткие имена
%%~ai - переменная %i принимает значение атрибутов файла
%%~ti - переменная %i принимает значение даты /времени файла
%%~zi - переменная %i принимает значение размера файла

Возможно объединение нескольких операторов:

%%~dpi - переменная %i заменяется только на имя диска и путь
%%~nxi - переменная %i заменяется только на имя файла и его расширение
%%~fsIi - переменная %i заменяется только на полный путь с краткими именами
%%~ftzai - переменная %I заменяется на строку, выдаваемую командой DIR

Значение переменной %%pi внутри цикла команды FOR /R будет последовательно принимать значения путей папок, начиная с заданного набора [диск:]путь.

Так же, как и в предыдущем примере, желательно обнулить файл с результатами возможного предыдущего запуска данного командного файла:

REM Обнулить / создать файл для хранения списка каталогов C:\dirlist.txt
copy nul C:\dirlist.txt
REM Занесем первой строкой в пустой файл что-то вроде заголовка списка
Echo *** Список папок на диске C: *** >> C:\dirlist.txt
REM Сделать текущим каталогом корневой каталог диска C:
cd c:\
REM Выполнить для корневого каталога и всех вложенных каталогов, команду ECHO с выдачей значения переменной %%~pi
for /R %%i in (C) DO (
ECHO Папка "%%~pi" >> C:\dirlist.txt
)

В результате выполнения этого командного файла в корне диска C: будет создан файл dirlist.txt, содержащий список каталогов диска.

Если в цикле команды FOR /R используются подстановочные значения переменной %%I, то в качестве набора (in) не стоит использовать символ точки.

Задача - найти на диске файлы с расширением.log и скопировать их в каталог на другом логическом диске - D:\MUSOR

Желательно проверить наличие каталога D:\MUSOR и при необходимости, создать его командой md, а также удалить из него все файлы, если они существуют, командой del. Затем выполнить переход в корневой каталог диска C: и выполнить в цикле команды FOR поиск файлов по маске *.log во всех подкаталогах.

REM подготовить каталог D:\MUSOR
if not exist D:\MUSOR md D:\MUSOR
REM удалить без подтверждения (/Q) все файлы из каталога
del /Q D:\MUSOR\*.*
REM перейти в корень диска C:
cd c:\
REM Выполнить проверку наличия файлов с расширением *.log и скопировать их в
REM D:\MUSOR
for /R %%i in (c) DO (
if exist "%%~dpi*.log" copy "%%~dpi*.log" "D:\MUSOR\*.*"
)

Практика использования FOR /R показала, что не стоит использовать в качестве набора для обработки символ "точка" (конструкция in (.)), поскольку при использовании подстановочных значений, можно получить возврат из текущего каталога на уровень выше. В данном примере в качестве набора in используется любой не служебный символ. Команду копирования (copy) можно заменить на команду перемещения файлов (MOVE), что приведет к удалению файлов источников после копирования в каталог D:\MUSOR.

Пример с копированием файлов с расширением.log рассмотренный выше имеет некоторые существенные недостатки - не обрабатываются скрытые файлы и папки, и в конечном каталоге, куда копируются файлы (D:\MUSOR) не создаются подкаталоги с теми же именами, которые принадлежат путям исходных копируемых файлов. Для устранения этих недостатком можно использовать немного другой скрипт:

@echo off
REM подготовить каталог D:\MUSOR - удалить его и его подкаталоги командой RD
RD /S /Q D:\MUSOR
REM Создадим каталог заново
MD D:\MUSOR
REM Задаем начальную папку для обработки в команде FOR - C:\
for /R C:\ %%i in (C) DO (
xcopy "%%~dpi*.log" "D:\MUSOR%%~pi*.*" /H /R /Q /Y
)

Для копирования используется команда xcopy с ключами:

/H - копировать скрытые файлы.
/R - разрешение на замену файлов с атрибутом "Только чтение"
/Q - не отображать имена копируемых файлов
/Y - разрешать перезаписывать существующие файлы.

Подсказку по использованию команды XCOPY можно получить при вводе:
help xcopy
xcopy /?

При обработке строки xcopy "%%~dpi*.log" "D:\MUSOR%%~pi*.*" /H /R /Q /Y в цикле FOR, в качестве источника копирования будет выбираться C:\текущий путь\*.log а в качестве приемника - D:\MUSOR\текущий путь\имя копируемого файла

Похожий подход можно использовать для обнаружения и копирования исполняемых файлов (*.exe) из каталога временных файлов, задаваемого переменной TEMP. Бывает полезно для поиска вредоносных программ.

rem @echo off
REM подготовить каталог D:\MUSOR - удалить командой RD
RD /S /Q D:\MUSOR
REM Создадим каталог заново
MD D:\MUSOR
REM Задаем начальную папку для обработки (%TEMP%) и выполняем FOR
for /R "%TEMP%" %%i in (C) DO (
xcopy "%%~dpi*.exe" "D:\MUSOR%%~pi*.*" /H /R /Q
)

При работе с содержимым каталогов удобно использовать команды запоминания текущего каталога и перехода в новый PUSHD и команды восстановления ранее запомненного текущего каталога POPD

PUSHD "%TEMP%"
Echo Работаем в каталоге временных файлов
REM новый каталог стал текущим и можно использовать относительные пути
REM Выдать список exe-файлов текущего каталога (%TEMP%) командой DIR
DIR *.exe
REM Восстановить путь, запомненный командой PUSHD
POPD
)
Echo Вернулись в исходный каталог


Яндекс.ДиректИщете бытовую технику? Воспользуйтесь Яндекс.Маркетом. Поиск по параметрам. Отзывы. Выбирайте!market.yandex.ru

 








Дата добавления: 2015-08-31; просмотров: 667. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

Подкожное введение сывороток по методу Безредки. С целью предупреждения развития анафилактического шока и других аллергических реак­ций при введении иммунных сывороток используют метод Безредки для определения реакции больного на введение сыворотки...

Принципы и методы управления в таможенных органах Под принципами управления понимаются идеи, правила, основные положения и нормы поведения, которыми руководствуются общие, частные и организационно-технологические принципы...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Меры безопасности при обращении с оружием и боеприпасами 64. Получение (сдача) оружия и боеприпасов для проведения стрельб осуществляется в установленном порядке[1]. 65. Безопасность при проведении стрельб обеспечивается...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия