如何将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
相关产品推荐
相关产品推荐

