代码之家  ›  专栏  ›  技术社区  ›  oscfri

在Windows Subsystem for Linux中执行批处理文件

  •  21
  • oscfri  · 技术社区  · 7 年前

    是否可以执行 .bat 来自Windows Linux子系统(如Ubuntu)的文件?

    运行 .exe 文件,但我还没有找到运行 .球棒 . 我找到的唯一方法就是打开 cmd.exe ,但每次需要执行 .球棒 文件

    3 回复  |  直到 6 年前
        1
  •  33
  •   Compo    7 年前

    不幸的是,目前,如果不使用以下两种方法之一,您就无法做到这一点:

    cmd.exe /c foo.bat
    

    或者使用binfmt进行以下黑客攻击:

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

    然后您可以键入:

    foo.bat
    

    这个方法的问题是,您需要是root,每次打开bash窗口时都要运行它,对于 .cmd 我想,还有任何以 .bat 可能有问题!

    我想,在微软解决这个问题之前,你只能做到以上几点。

        2
  •  2
  •   Tomerikoo Glorified    5 年前

    如果第一个答案无效,请尝试:

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

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

    chmod +x foo.bat
    

    然后运行文件:

    ./foo.bat
    

    如果它说权限被拒绝,就试着用sudo运行它

        3
  •  2
  •   bguiz    4 年前

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