Windows CMD:Bat-to-Exe转换器-临时目录问题

Windows CMD:Bat-to-Exe转换器-临时目录问题,windows,cmd,exe,converter,batch-file,Windows,Cmd,Exe,Converter,Batch File,我正在使用将批处理文件转换为exe格式 现在,我遇到了一些问题。 每当我转换某些内容,并将“工作目录”设置为“当前目录”,然后在echo on模式下启动exe时,我最终会检查exe目录中是否有特定文件: 实际命令:如果不存在“%~dp0\file.txt”goto:nofile 输出:如果不存在“C:\Users\MyUser\AppData\Local\Temp\4CBC\\file.txt”转到:nofile 有人能帮我吗?我不希望它在temp目录中,我希望它在我的exe目录中 谢谢。使用%

我正在使用将批处理文件转换为exe格式

现在,我遇到了一些问题。 每当我转换某些内容,并将“工作目录”设置为“当前目录”,然后在
echo on
模式下启动exe时,我最终会检查exe目录中是否有特定文件:

实际命令:如果不存在“%~dp0\file.txt”goto:nofile

输出:如果不存在“C:\Users\MyUser\AppData\Local\Temp\4CBC\\file.txt”转到:nofile

有人能帮我吗?我不希望它在temp目录中,我希望它在我的exe目录中


谢谢。

使用
%CD%
而不是
%~dp0

编辑:

B2EC不是一个真正的转换器。.cmd文件的创建位置被选择为
%TEMP%
,这是一个很好的选择。应用程序只是缺少脚本工作目录的第三个选项-.exe文件目录。我建议你给作者发一封信,让他加上这个

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

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

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

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


旁注:通过提供适当的
lpApplicationName
lpCommandLine
CreateProcess
函数,可以使用指定的第0个参数轻松执行普通可执行文件。命令文件通过
cmd.exe执行,因此第0个参数不能以这种方式设置。

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

if not exist "%CD%\file.txt" goto :nofile
在作者没有将Bat更改为Exe的情况下,我认为您有两种选择:

  • 不再需要访问dp0

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

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

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

    YourCompiled.Exe %~dp0% %%* 
    
    然后,编译的exe从%1获取其目录。因此,您不能将所有内容都打包到一个exe中,但它的主要部分可能就足够了


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


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

    一般来说,这不是一个好主意。首先,在不同的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年的主题,但有一个答案,所以我张贴给任何其他人,碰巧在搜索中找到这个


    ,具有“提交当前目录”选项

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

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


    撰写本文时,Fatih Kodak最新版本2.1.4创建了一个运行时环境变量,可替代%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
    
    (%*表示“所有参数”)。 通过这种方式,批处理程序以批处理的形式运行,并且不会被修改 使用bat-to-exe转换器编译,创建完全独立于文件夹的可执行文件。选择“临时目录”, 并将所有子例程/可执行文件包含在mysubroutines文件夹中 像往常一样用光标“全部选择”,然后点击“复制”。 一定要包括xqt.cmd程序;将其放在mysubroutines文件夹的“外部”。确保主程序可以访问该文件。如果需要,请记住选择x64 正在x64计算机上运行,否则可执行文件将找不到SYSTEM32 文件夹。您可以在以下位置找到f2k0的批处理到exe转换器:


    尝试此批处理脚本开发环境,。它拥有开发批处理程序所需的一切,并编译成stabl
    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)