【问题标题】:Execute Batch file in Windows Subsystem for Linux在 Linux 的 Windows 子系统中执行批处理文件
【发布时间】:2018-07-12 23:17:43
【问题描述】:

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

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

【问题讨论】:

    标签: windows batch-file windows-subsystem-for-linux


    【解决方案1】:

    很遗憾,目前您无法在不使用以下任何一种的情况下这样做:

    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 命令对我来说已经足够好了。
    • 这就是我要找的。我需要这个在 Android Studio 的终端中启动gradlew.bat,所以我在我的~/.bashrc 中创建了一个别名:alias gradlewin='cmd.exe /c gradlew.bat'。
    【解决方案2】:

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

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

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

    chmod +x foo.bat
    

    然后运行文件:

    ./foo.bat
    

    如果显示权限被拒绝,请尝试使用 sudo 运行它

    【讨论】:

      【解决方案3】:

      很抱歉在这么旧的帖子上发帖,但我找到了解决方法(不确定它是否因更新而改变,我将在 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> 路径来满足您的需要)。

      【讨论】:

        猜你喜欢
        • 2018-06-25
        • 2012-07-28
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 2020-06-01
        • 2015-03-08
        • 1970-01-01
        相关资源
        最近更新 更多