4

我正在使用“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 目录中。

谢谢。

4

9 回答 9

2

在没有作者更改Bat to Exe的情况下,我认为您有两种选择:

  1. 无需访问 %~dp0

    或许您可以将Bat to Exefile.txt的包含选项合并到 EXE 文件中。如果是这样,在运行你编译好的exe时会自动解压到当前目录,你可以通过."file.txt"%CD%\file.txt

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

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

    YourCompiled.Exe %~dp0% %%* 
    

    然后,您编译的 exe 从 %1 获取其目录。因此,您不能将所有内容都打包到一个 exe 中,但它的主要部分可能对您来说已经足够了。

于 2010-01-02T19:45:34.900 回答
0

这是一个有 2.5 年历史的主题,但有一个答案,所以我为其他碰巧在搜索中找到这个的人发帖。


B2EC 由 Fatih Kodak 编写,具有“提交当前目录”选项。

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

在此处输入图像描述

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

在此处输入图像描述

于 2012-10-14T08:00:50.603 回答
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.
于 2010-01-02T23:46:30.920 回答
0

您可以将外部文件夹与 f2ko 的批处理到 exe 转换器一起使用。为子例程设置一个单独的文件夹可以整理项目文件夹。要调用位于 mysubroutinesfolder\mysubroutine 中的 mysubroutine,

...
pushd mysubroutinesfolder
call mysubroutine
popd
...

可以单线拨打电话:

call xqt mysubroutine

其中 xqt.cmd 是一个为您调用的程序:

pushd mysubroutinesfolder
call %*
popd
exit /b

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

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

于 2015-03-25T23:01:45.770 回答
0

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

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

于 2010-01-02T21:14:31.103 回答
0

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

于 2014-11-21T16:45:59.410 回答
0

试试这个批处理脚本的开发环境,批处理编译器。它拥有开发批处理程序所需的一切。并编译成稳定的独立可执行文件(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

干杯!

于 2015-08-02T13:14:54.370 回答
-1

使用%CD%而不是%~dp0.

编辑:

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

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

%~dp0- 脚本目录 ( %TEMP%/.../) - 几乎没用

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

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

旁注:通过提供适当的lpApplicationName和功能,lpCommandLine可以使用指定的第 0 个参数轻松执行普通的可执行文件CreateProcess。命令文件是通过 执行的cmd.exe,所以第 0 个参数不能这样设置。

于 2010-01-02T18:48:19.010 回答
-1

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

if not exist "%CD%\file.txt" goto :nofile
于 2010-01-02T18:50:00.207 回答