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

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

Nun-Nun 14-01-2018 20:37 2791366

Удалить несколько каталогов одной командой, не используя bat-ник
 
Как одной командой удалить несколько каталогов (как пустых, так и с файлами и подкаталогами), не используя bat-файл?

Iska 14-01-2018 20:44 2791367

Nun-Nun, одной — никак. Но Вас, полагаю, интересует не «одной командой», а «одной строкой» — по аналогии с этим? Если так, то опишите условия исполнения — где и как именно Вы хотите сие использовать.

Общий принцип:
Код:

for %i in ("FullPath1" "FullPath2" … "FullPathN") do @if exist "%~i\." rd "%~i"

Nun-Nun 14-01-2018 21:05 2791375

Цитата:

Цитата Iska
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 2791376

Цитата:

Цитата Nun-Nun
P.S. Каталоги могут быть непустыми, поэтому RD придётся запускать с ключами /s/q »

Это да.

Цитата:

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

Nun-Nun, есть соблазн таки создать один пакетный файл и не мучиться с двойным %comspec%, компоновкой команд, пробельными символами, экранированием кавычек и т.п.

Nun-Nun 14-01-2018 21:14 2791377

А могли бы пояснить, почему не работает конструкция типа:
Цитата:

Цитата Nun-Nun
RD /s/q Папка1 & RD /s/q Папка2 »


Iska 14-01-2018 21:38 2791383

Работает:



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

Nun-Nun 14-01-2018 21:45 2791387

Цитата:

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

Пробелов нет.

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

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

Iska 14-01-2018 21:52 2791390

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

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

Nun-Nun 14-01-2018 21:54 2791392

Iska,

Выяснилось вот что: из реестра конструкция RD /s/q Папка1 & RD /s/q Папка2 срабатывает нормально, а когда запускаю её из-под TC - не работает. Добавление команд & , /s и /q делают RD неработоспособной.
Цитата:

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

Как ни странно, именно так они и называются (созданы на период эксперимента).

Iska 14-01-2018 22:05 2791395

Nun-Nun, это из-за того, что в Total Commander'е используется внутренняя реализация ряда команд интерпретатора команд:
Цитата:

Цитата TOTALCMD.CHM
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.

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


megaloman 14-01-2018 22:13 2791396

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 2791398

Цитата:

Цитата megaloman
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 2791401

Цитата:

Цитата megaloman
Nun-Nun, Iska, А если так »

Для Total Commander? Ну, да — там именно %comspec% /c и надо принудительно указывать для неисполнения cd/md/rd самим Total Commander'ом.


Время: 18:46.

Время: 18:46.
© OSzone.net 2001-