Компьютерный форум 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=255778)

Nun-Nun 08-03-2013 08:38 2106617

Конструкция поиска и удаления
 
Не хочет работать вот такая конструкция:
Код:

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 2106622

Во-первых, двойной символ процента в имени переменной разбора вместо одинарного. Во-вторых, кавычки.

Попробуйте так (я бы ещё заменил прямой путь на переменную окружения):
Код:

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 2106627

Это смотря как запускать. Если из батника, то:
Код:

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 2106630

Цитата:

Цитата Foreigner
PS. Зачем дергать find.exe? »

А, кстати — да. Приведённая конструкция лучше.

Nun-Nun 08-03-2013 18:30 2106919

Foreigner,

Спасибо, конечно, но:
Цитата:

Цитата Foreigner
Зачем дергать find.exe »

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

Iska,

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

Foreigner 08-03-2013 19:04 2106930

Цитата:

Цитата Nun-Nun
Не всё так просто, как кажется! Заранее не извесно где именно окажется "Удаляемая папка" ! Она может быть как в профиле конкретного пользователя, так и в профиле "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 2108804

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 2108850

Цитата:

Цитата Nun-Nun
совместив место поиска с объектом поиска »

А если разнести их, хотя бы одной отсутствующей папкой ?
Код:

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 2108886

Цитата:

Цитата gora
А если разнести их, хотя бы одной отсутствующей папкой ? »

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


Время: 05:59.

Время: 05:59.
© OSzone.net 2001-