如何将bat转成exe并让exe接收参数?

How to convert bat to exe and make the exe receive parameters?

我有一个 bat 文件,我想将其转换成一个 exe,这样我就可以添加一个图标和一个名称。但是我也需要它来接受像我的bat文件这样的参数。

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:C:\Users\vanes\AppData\Local\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%

我试过各种转换器,但它们不允许我传递参数。 是否有任何其他转换器或手动执行此操作的方法允许我将参数传递到创建的 exe 文件中?

我不需要它立即拥有图标和名称,我可以通过 Resource hacker 添加它们。

I'm trying to make a URL parser that will parser a URL like cmd:shutdown /s so the command shutdown /s will be sent into the command prompt and run. But only if the user allows it to be passed to the cmd! Here the idea_ https://youtu.be/46pBeyHKQuQ

我尝试了 MajorGeeks.com 的 Bat To Exe Converter,它似乎可以很好地处理参数。我注意到的一件事是,将参数传递给批处理文件时,%* 不包括批处理文件的路径 运行,但转换后的 exe 包含。

在这种情况下,最好的选择可能是通过用 C# 重写批处理文件将其“转换”为 exe。下面是一个简单的 C# 程序,您可以将其与 URL 协议处理程序一起使用。它将 URI 编码参数转换为纯文本,通过查找协议处理程序名称(假定为“cmd:”)拆分命令,然后使用 Cmd /c 执行命令。如果您不想弹出 Cmd 控制台屏幕,那么您可以将此代码修改为 运行 直接使用更多解析的命令。当然,您也可以添加确认提示。

using System;
using System.Diagnostics;

namespace Parser
{
    class Program
    {
        static void Main(string[] args)
        {
            string x = System.Uri.UnescapeDataString(Environment.CommandLine);
            string[] y = x.Split(new string[] {"cmd:"}, StringSplitOptions.None);
            Process.Start("Cmd.exe", " /c " + y[1]);
        }
    }
}

这是我用来测试的 URL 协议处理程序注册条目:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\cmd]
"URL Protocol"="\"\""
@="\"URL:cmd Protocol\""

[HKEY_CURRENT_USER\SOFTWARE\Classes\cmd\DefaultIcon]
@="\"parser.exe,1\""

[HKEY_CURRENT_USER\SOFTWARE\Classes\cmd\shell]

[HKEY_CURRENT_USER\SOFTWARE\Classes\cmd\shell\open]

[HKEY_CURRENT_USER\SOFTWARE\Classes\cmd\shell\open\command]
@="C:\Parser\Parser.exe %1"

顺便说一句,您可以通过 Shell 打开注册表项 运行 一个 .vbs,方法是在其前面加上 Wscript.exe 或 Cscript.exe。但是,浏览器随后会询问您是否要 运行 Windows Scripting Host。如果您创建自己的 exe,浏览器将显示 exe 名称(您可以添加图标),因此 exe 可能是您想要的方式。