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