В системе * 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 по-прежнему является предпочтительным.
