我有一个在命令行中完美运行的单行代码段,但在我作为批处理脚本的一部分运行时失败并引发错误。
以下命令按预期运行,删除文件夹中的所有空子文件夹。
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"
...它抛出了标准错误:
排序不被识别为内部或外部命令
在过去一小时左右的时间里,我一直在尝试使用和不使用管道,更改选项的顺序,查找dir
和sort
等文档,但是我仍然无法弄清楚这里发生了什么。批处理文件的其余部分(只有几行)工作正常,这是其中唯一失败的行。
有人可以帮忙吗?
答案 0 :(得分:5)
最有可能的是,你搞砸了PATH
变量。也许你会在脚本中的其他地方覆盖它。由于sort
是一个外部命令,与命令行中的所有其他命令相反,例如for
,dir
,rd
,它们是cmd
- 内部命令,找到命令需要PATH
变量。如果未定义PATH
,则仅在当前工作目录中搜索外部命令。还有一个PATHEXT
变量,用于定义可执行文件的标准文件扩展名,例如.com
,.exe
。因此,当sort
出现在命令提示符或批处理文件中时,系统会搜索当前工作目录和PATH
变量指定的所有目录,以查找基本名称为sort
的文件和一个由PATHEXT
指定的扩展名。命令sort
实际上称为sort.exe
,通常位于C:\Windows\System32
。