PDA

Показать полную графическую версию : [решено] Удалить несколько каталогов одной командой, не используя bat-ник


Nun-Nun
14-01-2018, 20:37
Как одной командой удалить несколько каталогов (как пустых, так и с файлами и подкаталогами), не используя bat-файл?

Iska
14-01-2018, 20:44
Nun-Nun, одной — никак. Но Вас, полагаю, интересует не «одной командой», а «одной строкой» — по аналогии с этим (http://forum.oszone.net/post-2789524.html#post2789524)? Если так, то опишите условия исполнения — где и как именно Вы хотите сие использовать.

Общий принцип:
for %i in ("FullPath1" "FullPath2" … "FullPathN") do @if exist "%~i\." rd "%~i"

Nun-Nun
14-01-2018, 21:05
Nun-Nun, одной — никак. Но Вас, полагаю, интересует не «одной командой», а «одной строкой» — по аналогии с этим? Если так, то опишите условия исполнения — где и как именно Вы хотите сие использовать. »
Да, таким же образом как и в той теме - запускать из автозагрузки в Run. И есть соблазн добавить это к уже имеющейся команде:
%comspec% /c start /min %comspec% /c ping -n 15 127.0.0.1 ^& del C:\Temp\amt3.log C:\Temp\swtag.log C:\Temp\Twain.log C:\Temp\Twain001.Mtx C:\Temp\Twunk001.MTX C:\Temp\Twunk002.MTX
P.S. Каталоги могут быть непустыми, поэтому RD придётся запускать с ключами /s/q
P.P.S. Пробовал вот такое, но оно не работает: RD /s/q Папка1 & RD /s/q Папка2

Iska
14-01-2018, 21:13
P.S. Каталоги могут быть непустыми, поэтому RD придётся запускать с ключами /s/q »
Это да.

Да, таким же образом как и в той теме - запускать из автозагрузки в Run. И есть соблазн добавить это к уже имеющейся команде: »
Nun-Nun, есть соблазн таки создать один пакетный файл и не мучиться с двойным %comspec%, компоновкой команд, пробельными символами, экранированием кавычек и т.п.

Nun-Nun
14-01-2018, 21:14
А могли бы пояснить, почему не работает конструкция типа:
RD /s/q Папка1 & RD /s/q Папка2 »

Iska
14-01-2018, 21:38
Работает:

https://i.imgur.com/wVjLUMh.png

Названия каталогов Папка1 и Папка2 не содержат пробельных символов? Каталоги Папка1 и Папка2 расположены в текущем каталоге для исполняющего данную команду процесса cmd.exe?

Nun-Nun
14-01-2018, 21:45
Каталоги Папка1 и Папка2 не содержат пробельных символов? Каталоги Папка1 и Папка2 расположены в текущем каталоге для исполняющего данную команду процесса cmd.exe? »
Пробелов нет.

Папка 1 - это: C:\Temp\88
Папка 2 - это: C:\Temp\99

Есть одна странность. Даже при попытке удаления только одной папки команда RD почему-то никак не хочет работать с ключами /S и /Q , без этих ключей работает нормально. :(

Iska
14-01-2018, 21:52
Nun-Nun, где именно не работает Ваша конструкция — в ярлыке? А в «ручками» запущенном cmd.exe? Есть ли права на удаление самого указанного каталога и вложенных в него каталогов и файлов? Нет ли в момент удаления открытых каким-либо приложением файлов, находящихся в нём или в одном из вложенных каталогов?

P.S. У меня есть подозрение, что каталоги зовутся не C:\Temp\88 и C:\Temp\99, а как-то по-другому.

Nun-Nun
14-01-2018, 21:54
Iska,

Выяснилось вот что: из реестра конструкция RD /s/q Папка1 & RD /s/q Папка2 срабатывает нормально, а когда запускаю её из-под TC - не работает. Добавление команд & , /s и /q делают RD неработоспособной.
P.S. У меня есть подозрение, что каталоги зовутся не C:\Temp\88 и C:\Temp\99, а как-то по-другому. »
Как ни странно, именно так они и называются (созданы на период эксперимента).

Iska
14-01-2018, 22:05
Nun-Nun, это из-за того, что в Total Commander'е используется внутренняя реализация ряда команд интерпретатора команд:
Command line: keys

If Total Commander is active, nearly all keyboard input is directed to the command line.
Here is the layout for some keys:

ENTER The command line is executed, if it contains at least one character (otherwise, the program under the cursor in the source window is started). If the command is cd, md or rd, it is executed internally. If it is an internal DOS command, DOS will be executed with this command. Otherwise, a program with the given name is executed.

Вкупе со слабым интеллектом парсера его командной строки это приводит к тем последствиям, каковые Вы наблюдаете. Вот, например, соответствующая тема на русскоязычном ресурсе: Проблема с пониманием особенностей командной строки :: Total Commander (http://wincmd.ru/forum/viewtopic.php?t=15404).

В Far Manager'е так же наличествует внутренняя реализация ряда команд интерпретатора команд, но, поскольку его парсер намного умнее, то он не страдает чрезмерным апломбом и, видя наличие & и параметров у команд rd, молча передает введённую строку на исполнение внешнему %comspec% (который не надо отдельно указывать в командной строке). Могу повторить скриншот :):

https://i.imgur.com/wVjLUMh.png

megaloman
14-01-2018, 22:13
Nun-Nun, Iska, А если так CMD /A /C (Rd /Q /S "Z:\Tra La La") & (Rd /Q /S "Z:\Tru La La")

Nun-Nun
14-01-2018, 22:16
Iska, А если так
CMD /A /C (Rd /Q /S "Z:\Tra La La") & (Rd /Q /S "Z:\Tru La La") »
Да, так работает!!!

P.S. Благодарю за помощь! Теперь причина проблемы понятна, решение найдено! Тему, наверное можно закрывать.

Iska
14-01-2018, 22:34
Nun-Nun, Iska, А если так »
Для Total Commander? Ну, да — там именно %comspec% /c и надо принудительно указывать для неисполнения cd/md/rd самим Total Commander'ом.




© OSzone.net 2001-2012