У системі * 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 Очевидно, що кожен окремий каталог явно не є нормальним. Має бути кращий спосіб.
Я спробував побудувати a for оператор відповідно до синтаксису в довідці про використання ( for /? )
FOR %variable IN (set) DO command [command-parameters]
...отримати...
for %f in * do rmdir %f
і кілька варіантів цього (наприклад, зміна другого %f до %f%, все-cap'ing синтаксис, хоча я знаю, що це нечутливий до регістру, оточуючих * з parens, et al). Жоден з яких не працював. Невдала помилка з незрозумілими та непотрібними помилками, такими як:
%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 досі є кращим.
for %f in (*) do rmdir %f Це одна з невдалих варіантів, які я спробував. У мене є тестовий каталог з порожнім каталогом, непустою директорією і звичайним файлом без розширення. Це відлуння rmdir file, а потім дає помилку The directory name is invalid.. Жодні каталоги не видаляються. Здається, відмовитися від помилки
for заяву, я знову звертаюся до SS64, зокрема SS64 на FOR для папок . Зверніть увагу, що Winbatch є розвивається мовою навіть сьогодні; Вам дійсно потрібно знайти посилання, яке є специфічним для XP, якщо ви дійсно повинні його підтримувати.
for /d %d in (*) do rmdir %d, який видаляє порожній каталог, ігнорує файл і залишає непорожній каталог самостійно, точно як * NIX rmdir * робить.
forЯ рекомендую вам зробити закладку ss64.com/nt як відмінне посиланняcmd. Зокрема, вfor %i in (*) do ..., дужки є обов'язковими.