CMD:蝙蝠到EXE转换器 – 临时目录的问题

我正在使用“蝙蝠到EXE转换器”将我的batch file转换为EXE格式。

现在,我遇到了一些问题。 每当我转换的东西,我设置“工作目录”为“当前目录”,我开始我的EXE echo on模式,这是我最终检查是否有一个特定的文件在我的EXE目录:

the actual command: if not exist "%~dp0\file.txt" goto :nofile

output: if not exist "C:\Users\MyUser\AppData\Local\Temp\4CBC\\file.txt" goto :nofile

谁能帮我这个? 我不希望它在临时目录中,我希望它在我的EXE目录。

谢谢。

没有蝙蝠到EXE作者改变,我认为你有两个选择:

  1. 不需要访问%〜dp0

    也许你可以合并file.txt蝙蝠包括选项EXE文件EXE文件。 如果是这样的话,在运行你编译好的exe文件时, "file.txt"会自动在当前目录下解压,你可以通过%CD%\file.txt来访问它。

  2. 从外部获取%~dp0并将其作为命令行参数传递给exe。

    这可以通过一个简单的初学者bat文件来完成,该文件驻留在与编译的主批处理文件相同的目录中。 这个脚本应该包含该行

     YourCompiled.Exe %~dp0% %%* 

    你编译的exe然后从%1获取它的目录。 所以你不能把所有东西都打包成一个exe文件,但是它的主要部分,或许对你来说已经足够了。

%cd%会给你当前目录:

 if not exist "%CD%\file.txt" goto :nofile 

那么,显然你的批处理exe转换器只是打包批处理文件,并将其提取到临时目录执行之前。 非常简单,很难弄错(与实际了解批处理文件相比),但会引入错误,例如您所描述的错误。

你最好的选择可能是使用另一批到exe转换器; 其中一些实际上更复杂一些。

使用%CD%而不是%~dp0

编辑:

B2EC不是一个真正的转换器。 装备.cmd文件的创建位置被选为%TEMP% ,这是一个不错的选择。 应用程序只是缺少第三个选项的工作目录的脚本 – .exe文件目录。 我建议你邮寄作者关于添加这个。

.exe和创建.cmd的不同路径会导致信息丢失,即我们无法同时知道.exe目录和当前目录,而无需向脚本提供额外的信息(例如,使用环境变量或将其作为第一个/最后一个参数脚本)。 这个脚本需要处理,我们将结束为这个转换器编写cmd脚本,这是不好的。

%~dp0 – 脚本目录( %TEMP%/.../ ) – 实际上没用

%cd% – 工作目录(在转换器中设置) – 当前只有2个选项:当前目录(.exe的工作目录)和临时目录(实际上等于%~dp0 ,但没有尾部反斜杠)

我认为这可以通过修补内存中的cmd.exe实例来更改脚本路径来解决,但这是B2EC开发人员的职责。

注意:通过提供适当的lpApplicationNamelpCommandLineCreateProcess函数,正常的可执行文件可以很容易地用指定的第0个参数执行。 命令文件是通过cmd.exe执行的,所以第0个参数不能这样设置。

一般来说,这不是一个好主意。 首先,在不同的cmd特征上容易出现转换器的误差和不稳定性。 其次,一个坚定的黑客仍然可以解码你正在做的批处理。 我的建议是,如果你害怕看到你的批次的人,

 1) let only the people who are authorized to use your batch to use it 2) give them the correct permissions. 

或者,根本不要使用批处理

 1) create a central interface such as a web interface, where all tasks to be done goes through that interface, like using an ATM machine where only buttons are allowed and all the available user options can be done by pushing buttons...etc.. 2) authenticate your users through a central authentication system, eg Active Directory, or LDAP or a database. 

这是一个2.5岁的主题,但有一个答案,所以我发布任何其他人发现这在搜索。


由法提赫·柯达(Fatih Kodak)撰写的B2EC有一个“提交当前目录”的选项。

当使用这种方法时,可以在批处理文件中引用%1以获取执行的EXE的路径(而不是真正运行的提取的BAT的路径)。

在这里输入图像说明

将鼠标悬停在UI中的该选项上将显示“提交当前工作目录作为最后一个参数”。 在我使用的“最后一个参数”一直是%1,但是你可以测试你的代码是肯定的。

在这里输入图像说明

在撰写本文时的最新版本2.1.4中,法提赫·柯达的Bat to Exe创建了一个在运行时的环境变量,可以替代%〜dp0来引用Exe的路径。 因此,您可以简单地将%-dp0替换为原始批处理文件中的%b2eprogrampathname%。

您可以使用外部文件夹f2ko的批处理exe转换器。 有一个单独的子例程文件夹可以包装一个项目文件夹。 要调用位于mysubroutinesfolder \ mysubroutine中的mysubroutine,

 ... pushd mysubroutinesfolder call mysubroutine popd ... 

这个电话可以作为一个班轮:

 call xqt mysubroutine 

其中xqt.cmd是一个为你打电话的程序:

 pushd mysubroutinesfolder call %* popd exit /b 

(%*表示“所有参数”)。 通过这种方式,批处理程序以批处理方式运行,并且UNMODIFIED将它们与bat一起编译为exe转换器,从而创建完全独立于文件夹的可执行文件。 选择“临时目录”,像往常一样用光标“全选”将所有子程序/可执行程序包含在你的mysubroutines文件夹中,然后点击“复制”。 一定要包含xqt.cmd程序; 把它放在你的mysubroutines文件夹的“外面”。 确保您的主程序可以访问。 如果您在x64机器上运行,请记住选择x64,否则可执行文件将找不到SYSTEM32文件。 你可以找到f2k0的批处理exe转换器:

http://www.f2ko.de/programs.php?pid=b2e

批处理脚本批处理编译器请尝试此开发环境。 它拥有开发批处理程序所需的一切。并编译成稳定的独立可执行文件(Exe)。

 Friendly user interface. Debugger, Check your code for syntax errors. Powerful, versatile compiler. Allows mouse input in batch files. Use Windows Common Dialog Boxes.(BrowseFiles,BrowseFolders) Draw graphics in batch files. Reverse engineering proof encryption of source code. Include Company name, Copyright info and Version info. Make invisible(silent) executables. Executables with administrator privileges. Run & debug your script while editing. Embed resources with executable.(music,images,files) Advance Commands (BrowseFiles,LaunchSilent,MouseCMD) Stand-alone executables.No dependencies needed. Executables are woking on almost all windows operating systems.(98 to 10) 

快速下载: http : //bc.gotek.info/files/BatchCompiler159.zip

干杯!