Войти

Показать полную графическую версию : [решено] Рекурсивный обход папки


Ван Рег
27-12-2010, 00:49
дана папка,в которой вложены некоторые папки и файлы.
задание:

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

Ван Рег
28-12-2010, 00:14
Разве это CMD?мне в нем нужно было.Но все равно большое спасибо))

Petya V4sechkin
28-12-2010, 07:47
Разве это CMD?
Да.

Ван Рег
29-12-2010, 01:13
эм...тупанул...спасибо большое)))

semiono
04-11-2011, 23:17
Нужен рекурсивный поиск файлов и их удаление. И всё должно быть максимально просто и желательно в одну строку и даже без пакетного файла.
*********************************************************************************
Найти файлы "%ProgramFiles%\Videodeluxe\{во всех подпапках}\_msi_keyfile_*" && удалить их.
*********************************************************************************
Не лишним будет attrib -R - H -S поставить, хотя я это и сам умею :)

Любое решение подойдёт, но просто хотелось бы получше и понадёжнее, можно и батником... я просто люблю всё в одну комманду набирать


Если на словах, то я не знаю как в cmd маску типа \*\*\* организовать, и ещё прочитав комманду find меня удивило то что она ищет
не имена файлов, а строки внутри, что меня поставило в тупик, как будто это grep :)
Маски наверх типа ..\..\ под Майкрософт работают, а вот вниз *\*\.. не знаю что делать.

Iska
04-11-2011, 23:50
Удаление одного или нескольких файлов.

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

Удаление, атрибуты и т.п. — на Вашу собственную проработку.
Маски наверх типа ..\..\ »
Это ссылки на родительский каталог, а не маски.

semiono
05-11-2011, 01:03
cmd.exe /c del /f /s /q /a rsh "%ProgramFiles%\Videodeluxe\_msi_keyfile_*"
у меня вопрос: работает /a: rsh, работает /a rsh, и даже так /a
это что недокументированные возможности или баг или что?




© OSzone.net 2001-2012