【发布时间】:2018-07-12 23:17:43
【问题描述】:
是否可以从适用于 Linux 的 Windows 子系统(例如 Ubuntu)执行 .bat 文件?
从 WSL 运行 .exe 文件很简单,但我还没有找到运行 .bat 的简单方法。我发现的唯一方法是打开cmd.exe,但是每次我需要执行.bat 文件时这样做有点麻烦。
【问题讨论】:
标签: windows batch-file windows-subsystem-for-linux
是否可以从适用于 Linux 的 Windows 子系统(例如 Ubuntu)执行 .bat 文件?
从 WSL 运行 .exe 文件很简单,但我还没有找到运行 .bat 的简单方法。我发现的唯一方法是打开cmd.exe,但是每次我需要执行.bat 文件时这样做有点麻烦。
【问题讨论】:
标签: windows batch-file windows-subsystem-for-linux
很遗憾,目前您无法在不使用以下任何一种的情况下这样做:
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 窗口时都运行它,可能对 .cmd 文件也这样做,我想,任何 bash 脚本名称以.bat 结尾可能有问题!
我想在微软处理这个问题之前,你仅限于上述情况。
【讨论】:
cmd.exe /c foo.bat 命令对我来说已经足够好了。
gradlew.bat,所以我在我的~/.bashrc 中创建了一个别名:alias gradlewin='cmd.exe /c gradlew.bat'。
如果第一个答案不起作用,请尝试:
sudo sh -c "echo :WindowsBatch:E::bat::/init: > /proc/sys/fs/binfmt_misc/register"
然后,找到该文件。然后使文件可执行:
chmod +x foo.bat
然后运行文件:
./foo.bat
如果显示权限被拒绝,请尝试使用 sudo 运行它
【讨论】:
很抱歉在这么旧的帖子上发帖,但我找到了解决方法(不确定它是否因更新而改变,我将在 2021 年 2 月 18 日发布)。我发现运行 CMD 然后为其提供参数(以链接到必要的批处理文件)是可行的——它也是一个接受构造参数发送到该命令。所以就我而言(我在 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> 路径来满足您的需要)。
【讨论】: