我显然以一种奇怪的方式弄乱了我的系统。cmd
除非我明确输入其扩展名,否则 Windows 7 的提示将不再识别任何可执行文件或批处理文件。
C:\Users\Current> xcopy /?
'xcopy' is not recognized as an internal or external command,
operable program or batch file.
通过使用扩展名限定它来解决这个问题.exe
:
C:\Users\Current> xcopy.exe /?
< ... all of the help for xcopy shows below, as expected ... >
当 xcopy 停止工作时,我以为我做了一些事情来破坏我的路径,但将其设置回 Windows 通常包含的一组最少的东西并没有解决这个问题。我的路径目前如下:
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\KC\Scripts
其中唯一不标准的东西是C:\KC\Scripts
,它在我的用户路径中指定。我不认为该字符串有任何格式错误。最近在通过 Windows RubyInstaller 安装 Ruby 并选择让它自动更新我的路径后发生了这种情况。此后,我从路径中删除了除上面发布的内容之外的所有内容,但错误仍然存在。
是否有人知道为什么 Windows 会停止识别 CLI 中的程序和批处理文件,而没有明确指定它们是 .exe 或 .bat 文件?
答案1
cmd
Windows shell 错误的可能原因
'foo' is not recognized as an internal or external command,
operable program or batch file
两个环境变量与shell命令执行紧密相关:PATH
和PATHEXT
。
- 环境
PATH
变量定义 Windows 搜索路径,即命令 shell 尝试定位时搜索的目录列表可执行文件文件。 - 环境
PATHEXT
变量定义了 Windows 在搜索可执行文件文件。
任何文件扩展名都可以考虑可执行文件:如果文件扩展名与应用程序相关联,则 shell 将执行相应的应用程序。这里已关联的代表相同定义为默认 shell 操作在 Windows 注册表中针对特定文件扩展名。
以下是对此主题的一个很好的介绍:Windows NT 命令外壳
答案2
我在使用批处理文件将 Access 前端应用程序复制到用户本地计算机时遇到了这个问题。他们的环境是 Windows 7 和 8 以及 32-64 位计算机的混合体。
我注意到 xcopy.exe 同时位于 System32 和 SysWOW64 文件夹中,我想知道是否存在冲突。
我将 xcopy.exe 复制到批处理文件所在的文件夹中,现在它似乎可以正常工作了。