CMD:Bat to Exe Converter - 临时目录问题

时间:2010-01-02 18:40:39

标签: windows cmd exe converter batch-file

我正在使用'Bat to Exe Converter'将我的批处理文件转换为exe格式。

现在,我遇到了一些问题。 每当我转换某些东西,并将“工作目录”设置为“当前目录”,并且我以echo on模式启动我的exe时,这就是我最终检查目录中是否存在特定文件我的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目录中。

感谢。

9 个答案:

答案 0 :(得分:2)

如果作者没有更改 Bat to Exe ,我认为您有两种选择:

  1. 无需访问%~dp0

    也许您可以将file.txt Bat to Exe 的include选项合并到EXE文件中。如果是这样,运行已编译的exe时,"file.txt"将在当前目录中自动解压缩,您可以通过%CD%\file.txt进行访问。

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

    这可以通过一个简单的启动程序bat来完成,该文件与编译的主批处理文件位于同一目录中。这个脚本应该包含行

    YourCompiled.Exe %~dp0% %%* 
    

    然后,您编译的exe从%1获取其目录。所以你不能将所有内容都打包到一个exe中,但它的主要部分,也许就足够了。

答案 1 :(得分:0)

使用%CD%代替%~dp0

修改

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

.exe和.cmd的不同路径会导致信息丢失,即我们无法同时知道.exe目录和当前目录,而无需向脚本提供其他信息(例如使用环境变量或首先将其传递给/脚本的最后一个参数)。这个脚本需要处理它,我们将结束编写为这个转换器定制的cmd脚本,这很糟糕。

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

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

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

附注:通过提供适当的lpApplicationNamelpCommandLineCreateProcess功能,可以使用指定的第0个参数轻松执行正常的可执行文件。命令文件通过cmd.exe执行,因此不能以这种方式设置第0个参数。

答案 2 :(得分:0)

%cd%将为您提供当前目录:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分: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.

答案 5 :(得分:0)

这是一个2。5年的老话题,但是有一个答案,所以我发布的其他人恰好在搜索中找到了这个。


B2EC written by Fatih Kodak,可以选择“提交当前目录”。

使用此选项时,您可以在批处理文件中引用%1以获取已执行的EXE的路径(而不是实际运行的已提取BAT的路径)。

enter image description here

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

enter image description here

答案 6 :(得分:0)

在撰写本文时,由Fatih Kodak编写的Bat to Exe的最新版本2.1.4在运行时创建了一个环境变量,可替代%~dp0来引用Exe的路径。因此,您只需将%-dp0替换为原始批处理文件中的%b2eprogrampathname%即可。

答案 7 :(得分:0)

您可以将外部文件夹与f2ko的批处理转换器一起使用。有 子程序的单独文件夹可以连接项目文件夹。 调用位于mysubroutinesfolder \ mysubroutine中的mysubroutine,

...
pushd mysubroutinesfolder
call mysubroutine
popd
...

可以将电话换成一个班次:

call xqt mysubroutine

其中xqt.cmd是为您执行调用的程序:

pushd mysubroutinesfolder
call %*
popd
exit /b

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

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

答案 8 :(得分:0)

为批处理脚本尝试此开发环境 Batch Compiler 。它拥有开发批处理程序所需的一切。并编译成稳定的独立可执行程序(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

干杯!