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

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

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






Задача - определить буквы дисков, присутствующих в системе и записать результат в файл с именем 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; просмотров: 664. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

СПИД: морально-этические проблемы Среди тысяч заболеваний совершенно особое, даже исключительное, место занимает ВИЧ-инфекция...

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

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

В теории государства и права выделяют два пути возникновения государства: восточный и западный Восточный путь возникновения государства представляет собой плавный переход, перерастание первобытного общества в государство...

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

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