带有相对于 PATH 的文件夹的 Windows 命令

带有相对于 PATH 的文件夹的 Windows 命令

从 Windows 命令行,如果我在 c:\foo,并且 c:\bar 在我的 PATH 上。
有没有办法调用'\bin\myapp.exe'并让其搜索我的路径来调用 c:\bar\bin\myapp.exe?
也许是一个前缀/环境变量或者一个标准实用程序?

我相信上述操作在 Macos/linux 系统上可以正常工作(?)并且如果命令中没有文件夹信息(即 c:\bar\bin 在路径上并且我只调用 myappe.exe),在 Windows 上也可以正常工作

更新-这是一个不知道(第三方)安装目录的脚本,它只知道基目录在路径上(并且 exe 名称足够独特,因此不太可能与同名的应用程序发生冲突)。我可能可以编写一个脚本来查找(grep)它,希望有一个简单的技巧(cmd.exe 选项等)允许在命令中使用子文件夹名称,类似于 unix 允许的方式

答案1

命令行参数(参数)或者call /?


If Command Extensions are enabled CALL changes as follows:
In addition, expansion of batch script argument references (%0, %1,
etc.) have been changed as follows:
        %~$PATH:1   -  searches the directories listed in the PATH
                       environment variable and expands %1 to the fully
                       qualified name of the first one found.  If the
                       environment variable name is not defined or the
                       file is not found by the search, then this
                       modifier expands to the empty string

FOR命令创建用字母而不是数字标识的参数变量(例如%%G)。上述参数扩展也可以应用于这些变量。

将上述内容应用于您的案例(请注意,在或脚本%%g中使用双倍百分比叹息):.bat.cmd

for %%g in ("bin\myapp.exe") do @set "_pathToMyApp=%%~$PATH:g"
rem         ↑↑  NO leading backslash
rem next line calls `myapp.exe` using its fully qualified name
"%_pathToMyApp%"

%g一个真实的例子:(请注意,在打开的窗口中使用命令提示符时,请输入单个百分号cmd)。我的PATH变量读取为,…;C:\Utils\;…没有进一步引用C:\Utils文件夹(基目录myapp.exe是一个简单的应用程序,它显示所有提供的参数:

d:\bat> myapp.exe
'myapp.exe' is not recognized as an internal or external command,
operable program or batch file.

d:\bat> bin\myapp.exe
The system cannot find the path specified.

d:\bat> set _
Environment variable _ not defined

d:\bat> for %g in ("bin\myapp.exe") do @set "_pathToMyApp=%~$PATH:g"

d:\bat> set _
_pathToMyApp=C:\Utils\bin\myapp.exe

d:\bat> "%_pathToMyApp%" display all parameters
param 0 = C:\Utils\bin\myapp.exe
param 1 = display
param 2 = all
param 3 = parameters

d:\bat>

答案2

在 Windows 中,您可以设置自己的环境变量,然后使用它们。因此,您可以访问:

  • 控制面板
  • 系统
  • 高级系统设置
  • “高级”选项卡
  • 环境变量

然后只需单击“新建”并添加变量。然后您可以在命令中使用该变量。因此,您只需设置路径,然后随意使用它,无论给它起什么名字。

例子:

因此,在您的情况下,您可以设置以下变量:appNameBinPath =“C:\bar”然后您可以在以下示例中使用它:

C:\foo>%appNameBinPath%\bin\myapp.exe 

或者,如果您想通过脚本和/或命令行设置永久变量,您可以查看这篇文章:https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe

相关内容