“X未被识别为内部或外部命令,可操作程序或批处理文件”的原因是什么?

时间:2017-01-04 01:13:42

标签: windows batch-file cmd

我有一个在命令行中完美运行的单行代码段,但在我作为批处理脚本的一部分运行时失败并引发错误。

以下命令按预期运行,删除文件夹中的所有空子文件夹。

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

但是,当放入像这样的批处理文件时......

FOR /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"

...它抛出了标准错误:

  

排序不被识别为内部或外部命令

在过去一小时左右的时间里,我一直在尝试使用和不使用管道,更改选项的顺序,查找dirsort等文档,但是我仍然无法弄清楚这里发生了什么。批处理文件的其余部分(只有几行)工作正常,这是其中唯一失败的行。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

最有可能的是,你搞砸了PATH变量。也许你会在脚本中的其他地方覆盖它。由于sort是一个外部命令,与命令行中的所有其他命令相反,例如fordirrd,它们是cmd - 内部命令,找到命令需要PATH变量。如果未定义PATH,则仅在当前工作目录中搜索外部命令。还有一个PATHEXT变量,用于定义可执行文件的标准文件扩展名,例如.com.exe。因此,当sort出现在命令提示符或批处理文件中时,系统会搜索当前工作目录和PATH变量指定的所有目录,以查找基本名称为sort的文件和一个由PATHEXT指定的扩展名。命令sort实际上称为sort.exe,通常位于C:\Windows\System32