我安装了适用于 Linux 的 Windows 子系统,并在 Windows 的“打开关闭”功能下将其打开。然后重新启动我的电脑。我在重新启动电脑后不久通过输入“wsl”检查了 cmd,它工作正常。但是当我从包含命令“wsl -e xxx.sh”的文件夹中运行我的脚本时,我收到错误
‘wsl’ 不被识别为内部或外部命令,可运行程序或批处理文件。
你们能帮我一下吗?谢谢。
我的电脑正在运行 操作系统:Windows 10 Pro;Microsoft Windows 版本:1903;操作系统内部版本:18362.418
答案1
运行可执行程序的命令在命令行上有效,但在批处理脚本中无效,最常见的原因是,在脚本中,在包含问题命令的行之前,用户创建了一个变量 %path%。对于一个包含以下内容的变量来说,它似乎是一个方便的名称:小路。问题是,Windows 使用此变量名保存以分号分隔的文件夹列表,在调用可执行文件时会搜索这些文件夹。它是一个系统变量。如果您重新定义了它,那么 Windows 使用的所有可执行文件(例如 .exe、.bat、.vbs 等)都将无法找到,并且脚本将失败并显示以下消息,其中 xxx 是预期的程序或文件:
'xxx' is not recognized as an internal or external command, operable program or batch file.
这可能会造成混淆,因为内部的到 cmd 环境 (dir、cls、set、copy、move 等) (list这里) 仍在此情况下继续工作。
您可以通过在问题行之前立即插入命令来调试怀疑存在此问题的脚本path
。Windows 路径变量以这些文件夹开头,并可能随着程序的安装而扩展:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
答案2
尝试从 32 位进程访问 64 位工具时常见的问题。wsl.exe
在 中System32
。但如果您的脚本恰好作为 32 位进程运行,则对 的所有访问System32
都将重定向到SysWOW64
。为了wsl.exe
在“真实”System32
文件夹中访问,您必须改用Sysnative
,例如在 中C:\Windows\Sysnative\wsl.exe
。
答案3
此错误在“安装疑难解答”部分中有介绍。WSL 安装指南:
术语“wsl”未被识别为 cmdlet、函数、脚本文件或可操作程序的名称。
确保已安装适用于 Linux 的 Windows 子系统可选组件。此外,如果您使用的是 ARM64 设备并从 PowerShell 运行此命令,您将收到此错误。请改为从 PowerShell Core 或命令提示符运行 wsl.exe。
答案4
$ENV:PATH="$ENV:PATH;c:\Windows\System32"
我们命令他们去处理这件事,否则就没有道路