You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将bat批处理文件转为支持接收参数的exe可执行文件

Bat转EXE支持参数传递解决方案

问题背景

我有一个bat批处理文件,想要将其转换为exe可执行文件,方便后续自定义图标和程序名称,同时需要生成的exe和原bat文件一样支持接收参数。我的bat文件通过%*接收参数,本身运行正常,代码如下:

@echo off
title Parsing...
set v=%temp%\cmd.vbs
set d=%temp%\decode.wsc
(echo ^<?xml version="1.0"?^>^<component^>^<?component error="true" debug="true"?^>
echo ^<registration description="Url Decode Helper" progid="JSEngine.Url" version="1.0" classid="{80246bcc-45d4-4e92-95dc-4fd9a93d8529}" /^>
echo ^<public^>
echo ^<method name="decode"^>^<PARAMETER name="s"/^>^</method^>
echo ^</public^>
echo ^<script language="JScript"^>
echo ^<!^[CDATA^[
echo var description=new UrlEncodeDecodeHelper;
echo function UrlEncodeDecodeHelper^(^)^{this.decode=decode;^}
echo function decode^(s^)^{return decodeURIComponent^(s.replace^(/\+/g," "^)^);^}
echo ^]^]^>
echo ^</script^>
echo ^</component^>)>%d%
(echo Set JSEngine=GetObject^("Script:%temp%\decode.wsc"^)
echo Set obj=WScript.CreateObject^("WScript.Shell"^)
echo stre=JSEngine.decode^(Wscript.Arguments^(0^)^)
echo str=Mid^(stre,5^)
echo If Len^(stre^)^>5 Then
echo 'Remove the ^(^'^) from run and move it to para for it to run without confirmation
echo para^(^)
echo 'run^(^)
echo Else
echo obj.Run^("cmd.exe"^)
echo End If
echo.
echo Function para^(^)
echo MsgBox str,vbOKOnly+vbInformation+4096,"Code passed by program:"
echo user=MsgBox^("Do you allow it to pass to the Command prompt and run?",vbQuestion+4096+vbYesNo+vbDefaultButton2,str^)
echo If user=vbYes Then
echo run^(^)
echo Else
echo End If
echo End Function
echo Function run^(^)
echo obj.Run^("cmd.exe /k " ^& str^)
echo End Function)>%v%

rem creates the wsc and vbs files needed.

wscript %v% %*
del %v% %d%

注:已将原代码中写死的临时文件路径修改为动态读取%temp%,适配不同设备的运行环境

存在的问题

我试过多种转换工具,但都不支持参数传递,请问是否有其他转换器或者手动实现方法,可让生成的exe文件支持传入参数?

补充说明

我暂时不需要转换工具直接设置图标和名称,后续可通过Resource hacker添加。我的实际需求是制作一个URL解析器,可解析类似cmd:shutdown /s的URL,提取shutdown /s这类命令传入命令提示符执行,且仅在用户许可后才会运行命令。

可行方案

方案1:使用支持参数传递的BAT转EXE工具

推荐使用最新版的Bat To Exe Converter,操作步骤如下:

  • 导入你的bat文件
  • 找到设置中的「参数传递」相关选项,勾选「将命令行参数传递到批处理」
  • 直接编译生成exe即可,生成的exe参数传递逻辑和原生bat完全一致

方案2:手动编写C语言外壳程序(完全可控、体积更小)

如果不想依赖第三方转换工具,可以写一个极简的C语言外壳程序编译为exe,直接调用bat逻辑并传递所有参数,示例代码如下:

#include <windows.h>
#include <string.h>

int main(int argc, char* argv[]) {
    char exec_cmd[8192] = "cmd.exe /c 你的bat文件完整路径 ";
    // 拼接所有传入的参数
    for (int i = 1; i < argc; i++) {
        strcat(exec_cmd, argv[i]);
        strcat(exec_cmd, " ");
    }
    // 隐藏运行黑框,不需要隐藏可以把SW_HIDE改为SW_SHOW
    WinExec(exec_cmd, SW_HIDE);
    return 0;
}
  • 用MinGW或MSVC编译上述代码即可得到exe,后续可直接用Resource Hacker修改图标、文件名等属性
  • 也可以直接将bat中的逻辑迁移到C/VBS中编译为单exe,无需附带bat文件,使用更方便

测试验证

编译生成exe后,可直接在CMD中执行你的程序名.exe "cmd:shutdown /s",验证参数传递和功能是否正常。

内容的提问来源于stack exchange,提问作者User not found

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:45:04