Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Рекурсивный обход папки (http://forum.oszone.net/showthread.php?t=195091)

Ван Рег 27-12-2010 00:49 1575239

Рекурсивный обход папки
 
дана папка,в которой вложены некоторые папки и файлы.
задание:

1. рекурсивно обойти папку.
2. вывести сообщение о кол-ве вложенных файлов
3. рекурсивно удалить папку,где нет файлов

Petya V4sechkin 27-12-2010 10:15 1575357

Ван Рег, как-то так?
Код:

@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 1575927

Разве это CMD?мне в нем нужно было.Но все равно большое спасибо))

Petya V4sechkin 28-12-2010 07:47 1576008

Цитата:

Цитата Ван Рег
Разве это CMD?

Да.

Ван Рег 29-12-2010 01:13 1576696

эм...тупанул...спасибо большое)))

semiono 04-11-2011 23:17 1788824

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

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


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

Iska 04-11-2011 23:50 1788835

Цитата:

Цитата del /?
Удаление одного или нескольких файлов.

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
Маски наверх типа ..\..\ »

Это ссылки на родительский каталог, а не маски.

semiono 05-11-2011 01:03 1788861

Код:

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


Время: 14:44.

Время: 14:44.
© OSzone.net 2001-