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

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

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






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



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

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

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

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

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Виды нарушений опорно-двигательного аппарата у детей В общеупотребительном значении нарушение опорно-двигательного аппарата (ОДА) идентифицируется с нарушениями двигательных функций и определенными органическими поражениями (дефектами)...

Особенности массовой коммуникации Развитие средств связи и информации привело к возникновению явления массовой коммуникации...

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

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

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

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