Показать полную графическую версию : [решено] Рекурсивный обход папки
дана папка,в которой вложены некоторые папки и файлы.
задание:
1. рекурсивно обойти папку.
2. вывести сообщение о кол-ве вложенных файлов
3. рекурсивно удалить папку,где нет файлов
Petya V4sechkin
27-12-2010, 10:15
Ван Рег, как-то так?
@Echo Off
SetLocal EnableExtensions
Call :CheckFileCount ваша_папка_без_слеша_в_конце
Exit /B
:CheckFileCount
For /F "Delims=" %%I In ('Dir /A-D /B /S "%~1\" 2^>nul ^| Find /V /C ""') Do Set FileCount=%%I
Echo %FileCount% файлов в папке %~1
If %FileCount%==0 (
Echo Удаление %~1
RD /S /Q "%~1"
) Else (
For /F "Delims=" %%I In ('Dir /AD /B "%~1\" 2^>nul') Do Call :CheckFileCount "%~1\%%~I"
)
GoTo :EOF
Разве это CMD?мне в нем нужно было.Но все равно большое спасибо))
Petya V4sechkin
28-12-2010, 07:47
Разве это CMD?
Да.
эм...тупанул...спасибо большое)))
Нужен рекурсивный поиск файлов и их удаление. И всё должно быть максимально просто и желательно в одну строку и даже без пакетного файла.
*********************************************************************************
Найти файлы "%ProgramFiles%\Videodeluxe\{во всех подпапках}\_msi_keyfile_*" && удалить их.
*********************************************************************************
Не лишним будет attrib -R - H -S поставить, хотя я это и сам умею :)
Любое решение подойдёт, но просто хотелось бы получше и понадёжнее, можно и батником... я просто люблю всё в одну комманду набирать
Если на словах, то я не знаю как в cmd маску типа \*\*\* организовать, и ещё прочитав комманду find меня удивило то что она ищет
не имена файлов, а строки внутри, что меня поставило в тупик, как будто это grep :)
Маски наверх типа ..\..\ под Майкрософт работают, а вот вниз *\*\.. не знаю что делать.
Удаление одного или нескольких файлов.
DEL [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена
ERASE [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена
имена Имена одного или нескольких файлов. Для удаления сразу нескольких файлов используются подстановочные знаки.
…
/S Удаление указанных файлов из всех подкаталогов.
/Q Отключение запроса на подтверждение при удалении файлов.
/A Отбор файлов для удаления по атрибутам (атрибуты: S - Системные файлы; R - Доступные только для чтения; H - Скрытые файлы;A - Файлы для архивирования; префикс "-" имеет значение НЕ).
…
Если нечто более сложное, нежели простое удаление, то шаблон таков:
@echo off
setlocal enableextensions enabledelayedexpansion
for /r "%ProgramFiles%\Videodeluxe" %%i in ("_msi_keyfile_*") do (
echo %%i
)
endlocal
exit /b 0
Удаление, атрибуты и т.п. — на Вашу собственную проработку.
Маски наверх типа ..\..\ »
Это ссылки на родительский каталог, а не маски.
cmd.exe /c del /f /s /q /a rsh "%ProgramFiles%\Videodeluxe\_msi_keyfile_*"
у меня вопрос: работает /a: rsh, работает /a rsh, и даже так /a
это что недокументированные возможности или баг или что?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.