Ночного тупняка вопрос

Mar 03, 2013 22:11


Мои дорогие воображаемые программисты! Скажите мне, плз, существует ли команда cmd, которая убивала бы произвольные директории в папке, не убивая саму папку? Я чет затупил и не могу сообразить.

del C:\Directory\*.* - убьет файлы в папке Directory, но оставит поддиректории.

rd C:\Directory\ - убьет саму папку совсем содержимым.

А есть ли способ ( Read more... )

Алгоритмы, Непонятки

Leave a comment

Comments 26

alluck March 3 2013, 18:31:22 UTC
for /D %I in (C:\Directory\*.*) do rd "%I"

Reply

semiurg March 3 2013, 18:56:50 UTC
От спасибо, добрый человек!

Reply

semiurg March 3 2013, 19:05:49 UTC
На себе-то успели проверить, надеюсь? Она так смешно пытается тупо убить все данные текущего пользователя... Но кто ж ей даст? )

Reply

alluck March 4 2013, 06:19:14 UTC
На себе я проверил с echo. Выводит - внезапно - список подкаталогов.

Надеюсь, благородный дон в курсе, что для BAT-файла нужно писать %%I, а с сетевыми каталогами половина команд норовит выполниться в директории Windows?

Reply


denimih March 3 2013, 18:37:30 UTC
Батником со следующим содержимым:

dir c:\directory\ /ad /s /b /od > %TEMP%\file.tmp
for /F %%i in (%TEMP%\file.tmp) do rmdir "%%i" /S /q
dir c:\directory\ /s /b /od > %TEMP%\file.tmp
for /F %%i in (%TEMP%\file.tmp) do del "%%i"
del %TEMP%\file.tmp

Одной строкой никак, ну только если свою версию del написать или поискать такую

Reply

semiurg March 3 2013, 18:58:48 UTC
Как-то моя версия попроще будет, нет? :)

Reply

denimih March 3 2013, 19:00:18 UTC
Проще да, но в условиях задачи нет удалить саму папку, а ежели там особые права стоят

Reply

emuzychenko March 4 2013, 04:08:40 UTC
Попроще, но каталог будет пересоздан от имени текущего пользователя, а если у него нет прав на удаление каталога - вывалится ошибка. Не смертельно, но некрасиво. :)

Тут вряд ли есть смысл гнаться за краткостью - все это лучше всего запихать в .cmd, и складывать эти .cmd в специальный каталог вроде Tools или Utils, который добавить в path. Туда же кидать однофайловые утилиты, для которых не требуется отдельных каталогов. Плюс там же держать .cmd-переходники для быстрого запуска часто используемых программ из консольных сеансов (если, конечно, Вы регулярно пользуетесь оболочками типа коммандеров).

Reply


mynine March 3 2013, 18:37:42 UTC
хм, наскольно я знаю способа в одну команду нет. удаляешь сперва файлы обычным DEL, а потом подпапки.
в батнике будет выглядеть так:

del /q /f "c:\dir\*"
for /d %%i in ("c:\dir\*") do rmdir /s /q "%%i"

не сильно лучше твоего варианта :), но нет лишнего создания папки

Reply


rencom March 3 2013, 18:44:05 UTC
в powershell команда RD понимает маску .

Reply

semiurg March 3 2013, 18:58:03 UTC
Это заради элементарной задачи целый powershell заюзать?

Reply

zoltan0 March 3 2013, 20:55:10 UTC
Можно ещё полноценный cygwin поставить, а можно только пакет базовых юниксовых команд http://gnuwin32.sourceforge.net/packages/coreutils.htm

Для тех кто привык, незаменимо.

В юниксе элементарно "rm -rf Directory" же :)

Reply

zoltan0 March 3 2013, 20:55:42 UTC
Оопс "rm -rf Directory/*"

Reply


fdv March 3 2013, 19:49:25 UTC
move [шаблоны] NULL ? ;-)

у тебя уже есть работающее решение.

Хочешь в одну строчку? -
"rd C:\Directory\ /s /q | md C:\Directory\" .

Reply

ban_dana March 3 2013, 20:42:12 UTC
канонично не |, а && ;)

Reply


Leave a comment

Up