如何创建必须在其自己的文件夹中运行的可执行文件的链接?

如何创建必须在其自己的文件夹中运行的可执行文件的链接?

我在如下所示的文件夹中有一个程序。目标是在实用程序文件夹中有一个链接,以便我可以从任何命令行调用它。

C:\实用程序\程序\
                      程序
                      一些重要的.dll
                      一些.important.ini

是否可以在实用工具文件夹可以像在 Program 文件夹中一样运行该文件?当我创建符号链接时,程序找不到其 dll/ini 文件。当我创建 .lnk 时,我无法通过键入“program”从命令行运行它,例如在 PowerShell、cmd 或 Run 中。

C:\实用程序\
             程序<---------应该是链接

我需要链接,因为我的环境 PATH 只包含 Utilities 文件夹,所以我不想每次添加新的 Program 文件夹时都将新文件夹附加到 PATH,我只想创建一个新的 [hard/sym] 链接。

答案1

不幸的是,我无法对答案发表评论。所以我不得不写一个新的。
如果您想在命令行中使用本机程序的命令,那么请不要使用命令@Start。

@"pathtofile/program.exe" %*

这样,所有参数都会被传送到原始程序,所有输出都会被传送到调用命令行。在路径中输入实用程序目录后,您可以在 cmd、powershell 和运行对话框中使用它。
在这个答案中这里,也描述了该技术。

PS:只需使用 .cmd 而不是 .bat 即可从视觉上区分快捷方式与普通批处理文件。用法相同。

编辑:经过测试,我意识到被调用的程序无法识别同一文件夹中所需的文件(如问题开头所述)。因此,需要一个更复杂的脚本(全部以批处理形式)来更改程序文件夹,然后执行并将目录更改回来。

脚本中唯一需要更改的是progpath所需程序的变量。当然,您REM也可以跳过所有命令(仅注释代码)。
以下是脚本:

@ECHO OFF

REM enable local variables
SETLOCAL

REM fullpath of program
SET progpath=C:\Dokumente und Einstellungen\Lukas Seidler\Desktop\notepad

REM save current direcory
SET currpath=%CD%

REM change to drive of prog
FOR %%I IN ("%progpath%") DO (%%~dI)

REM change to path of prog
FOR %%I IN ("%progpath%") DO (CD "%%~pI")

REM execute prog with optional parameters
FOR %%I IN ("%progpath%") DO ("%%~nxI" %*)

REM change to calling drive
FOR %%I IN ("%currpath%") DO (%%~dI)

REM change to calling path
FOR %%I IN ("%currpath%") DO (CD "%%~pnI\")

REM disable local variables
ENDLOCAL

REM EOF

为了在实用程序目录中轻松创建文件,请使用另一个脚本并将其放在实用程序目录中(以便于访问)。我将其命名为 makeshortcut.bat。用法是:makeshortcut "full\path\to\file"。只需将变量更改utilitypath为您的文件夹即可。

@ECHO OFF
SETLOCAL
SET utilitypath=D:\Apps\CommonFiles
SET outfile="%utilitypath%\%~n1.cmd"
ECHO @ECHO OFF > %outfile%
ECHO SETLOCAL >> %outfile%
ECHO SET progpath=%~f1 >> %outfile%
ECHO SET currpath=^%%CD^%% >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%progpath^%%") DO (^%%^%%~dI) >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%progpath^%%") DO (CD "^%%^%%~pI") >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%progpath^%%") DO ("^%%^%%~nxI" ^%%*) >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%currpath^%%") DO (^%%^%%~dI) >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%currpath^%%") DO (CD "^%%^%%~pnI\") >> %outfile%
ECHO ENDLOCAL >> %outfile%
ECHO done.

警告:不进行参数检查。现有文件将被覆盖。

答案2

如果您在那里创建快捷方式,那么您将使用快捷方式中的“启动于”字段来指示它应该在其中运行的文件夹。

那么,试试吧启动程序.lnk看看是否有效。

答案3

您可以尝试使用 MS-Dos 批处理文件,其文件名(扩展名除外)与您要执行的程序相同。

例如,C:\Utilites\Program.bat可以包含如下内容:

C:\Utilities\Program\program.exe

或者

@start "" /D "%~dp0Program\" program.exe %*

然后,当您使用 CD 转到 时C:\Utilities,只需键入Program,您想要启动的原始文件就会被启动。

或者,你可以使用杜斯凯功能。如果你选择这样做,也许本文可以帮助您学会这样做。

除了 exe 文件之外,还可以选择创建指向原始目录中所有其他文件的硬链接/符号链接。

您还可以将程序及其文件复制(或链接)到您的 System32 目录。与 DosKey 一样,后者允许您从任何地方启动该程序,即使在 CMD/Run/PowerShell 中也是如此(但不是 Explorer)。

答案4

当我安装 7z 程序并想在命令提示符中使用它时,这对我有用:

  • 我安装了 7z,然后创建了 exe 文件的链接并将其复制到 windows\system32 文件夹。
  • 我创建了一个 7z.bat 文件并在其中放入一行:7z.exe.lnk,然后将该文件复制到 windows\system32 文件夹中。

然后它就会按你希望的方式工作。下面是一个例子(抱歉,是丹麦语的窗口):

在此处输入图片描述

相关内容