Войти

Показать полную графическую версию : [решено] Конструкция поиска и удаления


Nun-Nun
08-03-2013, 08:38
Не хочет работать вот такая конструкция:
cmd /c For /F "tokens=*" %%m IN ('Dir "%SystemDrive%\Documents and Settings" /S /B /AD ^| find /I "Удаляемая папка"') Do RD /S /Q "%%m"
В чём тут ошибка?

Iska
08-03-2013, 09:07
Во-первых, двойной символ процента в имени переменной разбора вместо одинарного. Во-вторых, кавычки.

Попробуйте так (я бы ещё заменил прямой путь на переменную окружения):
cmd.exe /c "for /f "tokens=*" %i in ('dir /s /s /a:d "%AllUsersProfile%\.." ^| find.exe /i "Удаляемая папка"') do @rd /s /q "%~i""

Foreigner
08-03-2013, 09:19
Это смотря как запускать. Если из батника, то:

for /f "tokens=*" %%i in ('dir /b /s /ad "%SystemDrive%\Documents and Settings\Удаляемая папка"') do rd /s /q "%%i"

если из консоли, то %i вместо %%i

PS. Зачем дергать find.exe?

Iska
08-03-2013, 09:31
PS. Зачем дергать find.exe? »
А, кстати — да. Приведённая конструкция лучше.

Nun-Nun
08-03-2013, 18:30
Foreigner,

Спасибо, конечно, но:
Зачем дергать find.exe »
Не всё так просто, как кажется! Заранее не извесно где именно окажется "Удаляемая папка" ! Она может быть как в профиле конкретного пользователя, так и в профиле "All Users", а может оказаться и в "Default User". Поэтому и используется команда find !!!

Iska,

Добавил кавычки - всё заработало! Огромное спасибо!

Foreigner
08-03-2013, 19:04
Не всё так просто, как кажется! Заранее не извесно где именно окажется "Удаляемая папка" ! Она может быть как в профиле конкретного пользователя, так и в профиле "All Users", а может оказаться и в "Default User". Поэтому и используется команда find !!! »

например:

dir /b /s /ad "С:\Папка с которой начинаем поиск\Искомая подпапка на любом уровне вложения"


Надо просто попробовать...

Пример выполнения:

> dir /b /s /ad C:\Users\Dmitry\Downloads
C:\Users\Dmitry\AppData\Local\Microsoft\GFWLive\Downloads
C:\Users\Dmitry\Desktop\Downloads

Nun-Nun
11-03-2013, 20:34
Foreigner,

Моя конструкция после добавления кавычек прекрасно заработала (впрочем, если запускать из батника, то работает и без кавычек, ну и, разумеется, без cmd). А с Вашим вариантом конструкции
for /f "tokens=*" %%i in ('dir /b /s /ad "%SystemDrive%\Documents and Settings\Удаляемая папка"') do rd /s /q "%%i"
ничего не удаляется, да и не удивительно: как можно что-то найти, задав только место поиска, но не указыв объект поиска, точнее, совместив место поиска с объектом поиска?!
В моём случае "%SystemDrive%\Documents and Settings" - это место поиска, а "Удаляемая папка" - объект поиска. Это и логично и работоспособно.
For /F "tokens=*" %%m IN ('Dir "%SystemDrive%\Documents and Settings" /S /B /AD ^| find /I "Удаляемая папка"') Do RD /S /Q "%%m"

gora
11-03-2013, 21:54
совместив место поиска с объектом поиска »
А если разнести их, хотя бы одной отсутствующей папкой ?
for /f "tokens=*" %%i in ('dir /b /s /ad "%SystemDrive%\Удаляемая папка"') do rd /s /q "%%i"

пример удачного поиска:e:\Temp 1>for /F "tokens=*" %i in ('dir /b /s /ad "c:\Users\Public\Sample Videos
"') do Echo rd /s /q "%i"

e:\Temp 1>Echo rd /s /q "c:\Users\Public\Videos\Sample Videos"
rd /s /q "c:\Users\Public\Videos\Sample Videos"

Nun-Nun
11-03-2013, 22:22
А если разнести их, хотя бы одной отсутствующей папкой ? »
Пока не понимаю - почему, но так действительно работает!
Как ни странно, но налицо какой-то "парадокс" или недокументированная возможность интерпретатора команд (системы или ещё не знаю чего). Ведь логичным будет указывать область, где должен выполняться поиск, и поиск должен выполняться именно в ней, а не за её пределами! И тем не менее, всё работает от обратного! Вы можете это пояснить?




© OSzone.net 2001-2012