递归路径

10

我在谷歌上搜索了这个问题,但是并没有学到太多知识,因为搜索结果通常涉及到其他递归主题。我想知道的是,在Windows上,如果一个文件夹在路径中,它是否被递归地定义了?

我想创建一个C:\StandalonePrograms文件夹,并将其添加到路径中。其中将包含许多编程语言和其他通常来自zip文件的程序。我想知道,通过将程序目录添加到路径中,我是否可以调用所有程序。

例如,如果我有C:\StandalonePrograms\SomeProgram,我能否打开命令提示符,输入someCommand并期望它从C:\StandalonePrograms\SomeProgram\bin文件夹运行?

还是必须在我的路径中明确定义C:\StandalonePrograms\SomeProgram\bin

如果我不能这样做,是否有任何解决方法来实现我想要的情况?

2个回答

12

您需要逐个指定每个目录,PATH 机制不会遍历子目录。

一种解决方法是创建一个目录,里面放置着一些批处理文件,这些批处理文件以完整路径启动真正的工具。


1
不要创建批处理文件,只需将 C:\ProgramData\Microsoft\Windows\Start Menu\Programs 添加到 %PATH% 中,并确保每个程序都有一个快捷方式。然后将 .LNK 添加到 %PATHEXT% 中,这样您就可以键入 <program_name> 而不是 <program_name>.lnk - Detached Laconian
请注意,程序默认会在Program Files文件夹内的某个文件夹中启动,这意味着<program_name> arg.txt将使用Program Files文件夹内的名为arg.txt的文件,而不是当前工作目录中的文件。要解决这个问题,请右键单击快捷方式,选择“属性”,并在“起始位置”字段中填入一个空字符串""。或者,按照此处的说明操作:https://dev59.com/InM_5IYBdhLWcg3w6X1e#8163798。 - Detached Laconian

2

以下是解决方案。将其保存为“SetMyPath.bat”(或其他名称):

@echo off
set dir=%*
setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir /s /ad /o:d /b "%dir:"=%"') do set path=%%i;!path!
cmd

(在此,"%dir:"=%"仅是允许您在调用此文件时省略名称中含有空格的目录周围的引号所需。如果您不需要此功能,则可以使用%1代替。)

此文件需要一个命令行参数:目录。它将启动一个新的cmd.exe副本,在其中给定目录下的文件将可用:

C:\> mysqldump.exe
File not found.
C:\> SetMyPath.bat C:\Program Files\MySQL
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\> mysqldump.exe
Usage: mysqldump [OPTIONS] database [tables]
C:\> exit

在这个例子中,第一个命令显示mysqldump.exe没有在路径上。执行批处理文件后,会启动一个新的cmd.exe,其中mysqldump.exe可用。当您完成使用它时,exit将您返回到原始的cmd.exe副本。
如果在不同的子目录下有两个.exe文件的副本,则将启动最近更新的目录中的副本(因为使用了/o:d)。在这个例子中,假设MySQL的最新版本的目录是最后更新的目录,则会启动最新版本的mysqldump.exe
可以修改批处理文件以确保启动最新的.exe副本(如果需要,请在评论中询问我)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接