Windows 相当于 UNIX 的 `rmdir *` 命令

Windows 相当于 UNIX 的 `rmdir *` 命令

在 *NIX 系统中,您可以轻松键入rmdir *以删除所有空目录.。rmdir 将会抱怨非空目录并且不会删除它们。

基本上,如果你有一棵这样的树:

/
  d0/
    file
  d1/
    d0/
  d2/
  d3/

rmdir *然后从内部运行/将导致d2/d3/仅被删除。d0/d1/将被单独留下并回显有关它们非空的错误,以防止内容丢失在不确定的状态。

/
  d0/
    file
  d1/
    d0/

我找不到与此等效的 Windows 版本。最接近的版本是rmdir /s .,它等效于rm -r .,只不过它拒绝删除,.因为 shell 正在使用它。不确定它是否rm -r .也拒绝删除.。还没有测试过。

与 *NIX 一样rmdirrmdir如果目录非空,Windows 将拒绝删除该目录。但是,似乎没有像典型的 那样的通配符选择器*,这很奇怪,因为该标记可以在其他任何地方使用。

正是这种东西让我对 Windows 命令行感到沮丧。如果我有 4,000 个目录,那么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 不是一个选项。我需要能够在保证已安装的 shell 中执行此操作,即cmd.exe Jeff Zeitlin 告诉我 Powershell 保证 >= Windows 7不过,cmd.exe还是比较推荐的。

答案1

您的FOR语句需要/D开关:FOR /D %I in (*) do ...。这会导致完全跳过文件,只处理文件夹(目录)。由于RMDIR/RD不会删除非空目录,这似乎就是您想要的;请注意,不同版本的 Windows 可能会对尝试删除非空目录的错误做出不同的反应。

参考文献:SS64FORFOR /D(适用于文件夹)

答案2

%f这时候出乎意料。*这时候出乎意料。

for %f in * do rmdir %f

使用时里面您需要将 s 加倍的批处理文件%

你所指的是一个括号中的表达式。括号是不是选修的。

更正的命令行:

for %f in (*) do rmdir %f

正确的批处理文件:

for %%f in (*) do rmdir %%f

在线帮助中对此进行了记录:

> for /?
Runs a specified command for each file in a set of files.

FOR %variable IN (set) DO command [command-parameters]

  %variable  Specifies a single letter replaceable parameter.
  (set)      Specifies a set of one or more files.  Wildcards may be used.
  command    Specifies the command to carry out for each file.
  command-parameters
             Specifies parameters or switches for the specified command.

To use the FOR command in a batch program, specify %%variable instead
of %variable.  Variable names are case sensitive, so %i is different
from %I.

并且在为了

如果您在命令行而不是批处理程序中使用 FOR 命令,则只需使用一个百分号:%G而不是%%G

FOR 参数

第一个参数必须使用单个字符来定义,例如字母 G。

FOR %%G IN ...

相关内容