在 Windows 子系统中为 Linux 执行批处理文件

Execute Batch file in Windows Subsystem for Linux

是否可以从 Windows 子系统为 Linux(例如 Ubuntu)执行 .bat 文件?

从 WSL 中 运行 一个 .exe 文件很简单,但我还没有找到 运行 一个 .bat 的简单方法。我找到的唯一方法是打开 cmd.exe,但每次我需要执行 .bat 文件时这样做有点麻烦。

不幸的是,目前您不能不使用:

cmd.exe /c foo.bat

…或以下使用 binfmt 的 hack:

sudo sh -c "echo :WindowsBatch:E::bat::/init: > /proc/sys/fs/binfmt_misc/register"

然后您只需输入:

foo.bat

此方法的问题是您需要成为 root,运行 每次打开 bash window,可能会执行.cmd 文件也一样,我想,任何以 .bat 结尾的 bash 脚本名称都可能有问题!

我想在 Microsoft 处理此问题之前,您仅限于上述内容。

如果第一个答案不起作用,请尝试:

sudo sh -c "echo :WindowsBatch:E::bat::/init: > /proc/sys/fs/binfmt_misc/register"

然后,找到文件。然后使文件可执行:

chmod +x foo.bat

然后运行文件:

./foo.bat

如果它说权限被拒绝,只需尝试 运行使用 sudo

将其连接

很抱歉 post 在这样一个旧线程上,但我找到了解决它的方法(不确定它是否因更新而改变,我 post 在 18/02/2021 ).我发现 运行 CMD 然后向它​​提供参数(到 link 到必需的批处理文件)是有效的——它也是一个接受构造的参数发送到该命令。所以就我而言(我在 10 Pro 上的 WSL 中使用 Debian 10.8):

/mnt/c/windows/system32/cmd.exe /mnt/c/temp/batchfile.bat "-arga -argb -argc"

我认为这可能是相当一致且可行的解决方法(仅以 C:\temp\bathfile.bat 为例,只需根据您的需要使用相对 /mnt/<drv>/<dir>/<batchfile> 路径)。