В системе * NIX вы можете легко набрать rmdir *
чтобы удалить все пустые каталоги .
, rmdir будет жаловаться на непустые каталоги и не удалит их.
В основном, если у вас есть такое дерево:
/
d0/
file
d1/
d0/
d2/
d3/
Тогда запуск rmdir *
изнутри /
приведет к удалению только d2/
и d3/
. d0/
и d1/
будут оставлены в покое с повторяющейся ошибкой о том, что они не пустые, чтобы предотвратить потерю содержимого в подвешенном состоянии.
/
d0/
file
d1/
d0/
Я не смог найти Windows, эквивалентную этому. Ближайшая вещь - это rmdir /s .
, что эквивалентно rm -r .
кроме того, что отказывается удалять .
потому что оболочка использует его. Не уверен, если rm -r .
также отказывается удалять .
, Не проверял это.
Как и * NIX rmdir
, Windows rmdir
откажется удалить один каталог, если он не пуст. Тем не менее, похоже, что нет селектора с подстановочными знаками, подобного типичному *
, что странно, потому что этот токен можно использовать где-либо еще.
Именно такие вещи меня расстраивают из-за командной строки Windows. Если у меня есть 4000 каталогов, то явное rmdir
каждого отдельного каталога явно не является нормальным вариантом. Должен быть лучший способ.
Я попытался создать оператор for
соответствии с синтаксисом в справке по использованию (for /?
)
FOR %variable IN (set) DO command [command-parameters]
...получить...
for %f in * do rmdir %f
и несколько вариантов этого (например, изменение второго %f
на %f%
, использование заглавных букв в синтаксисе, хотя я знаю, что он не учитывает регистр, окружая *
паренами и т. д.). Ни один из которых не работал. Все терпит неудачу с необъяснимыми и бесполезными ошибками как:
%f was unexpected at this time.
* was unexpected at this time.
(Примечание: я пытаюсь сделать это в интерактивном режиме, а не в сценарии)
Или в случае (*)
варианта ...
>for %f in (*) do rmdir %f
>rmdir file
The directory name is invalid.
>dir
Volume in blah blah blah
Directory of blah
blah blah <DIR> .
blah blah <DIR> ..
blah blah <DIR> nonemptydir
blah blah <DIR> emptydir
blah blah 1 file
1 File(s) 1 bytes
4 Dir(s) huge number bytes free
... это даже не касается каталогов.
Я не понимаю, почему он это сделал. Я следовал синтаксису, как это было описано в справке.
Powershell не вариант. Я должен быть в состоянии сделать это в оболочке, которая гарантированно будет установлена, т.е. Джефф Цейтлин сообщил мне, что Powershell гарантированно> = Windows 7 . Тем не менее, cmd.exe
.cmd.exe
по-прежнему является предпочтительным.