使用单个条目将目录及其所有子目录添加到 PATH 变量中

使用单个条目将目录及其所有子目录添加到 PATH 变量中

我的主文件夹中有一个目录,用于放置命令行软件 (CMD_Software)。我将每个软件都放在 CMD_Software 中的各自目录中,以避免混乱。

我想在我的 PATH 变量中创建一个条目,以允许从命令行访问 CMD_Software 及其包含的所有目录。

我试过了C:\Users\myuser\CMD_Software\*,但没用。那时我已经没有主意了。

请注意,我并不是尝试在终端中设置新路径,而是尝试在系统属性的“高级”选项卡上的“环境变量”中设置新路径。

答案1

PATH 变量不支持通配符或递归。这是设计使然。

我曾使用过两种可能的解决方法:

  • 创建一个包含简单批处理文件的目录,并将该目录添加到 PATH。每个批处理文件都可以启动您想要的程序,例如:

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    第一行是注释,第二行以 开头,@以避免显示正在运行的命令,并%*用于将任何命令行参数传递给 EXE。

  • 为 CMD.EXE 添加别名:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    这实际上CMD_Software在命令提示符中转换为等号后的所有内容。 被$*替换为提供的参数。

我更喜欢第二种方法,因为您可以将所有别名分组到一个文件中(参见 DOSKEY /? 中的“/MACROFILE”开关),并在命令解释器使用注册表设置启动时让它自动运行(参见 CMD /? 中的“AutoRun”键)。

第二种方法的缺点是别名只能在命令行的开头使用。如果你想要链接命令,这可能会有问题。例如,除非CLS & CMD_Software你使用括号将别名放在单独的行中,否则将不起作用:

CLS & (
CMD_Software
)

每当这成为一个问题时,我就会采用批处理文件方法。

答案2

这是我用来修复问题的方法。复制下面的脚本并将其保存到FIXPATH.BAT您已添加到环境变量的文件夹中PATH。例如:

C:\用户\myuser\CMD_Software\

现在,每当您需要运行子文件夹中的程序时,说......

C:\Users\myuser\CMD_Software\unixutils\grep.exe
或者
C:\Users\myuser\CMD_Software\imagetools\exiftool.exe

先运行fixpath然后输入命令(例如grepexiftool),如下所示:

Microsoft Windows [版本 6.3.9600]
(c)2013 Microsoft Corporation。保留所有权利。

C:\Users\myuser>修复路径
C:\Users\myuser>exiftool


FIXPATH.BAT

设置本地启用延迟扩展
cd /D %~dp0

对于/R %%d 在(.)中执行(
    设置“dirs=!dirs!;%%d”

路径=%路径%!目录!
(结束本地
    设置“ret=%PATH%”
cmd /K "标题 [#] 路径固定 [#] && 路径 %ret%"
退出/B

谢谢@VonC 的回答

答案3

在 ...\CMD_Software 下(或实际上任何地方)放置一个“programlinks\”子目录,并用符号链接或硬链接填充要访问的每个可执行文件。然后在 PATH 中为 ...\programlinks 添加一个条目就足够了。

答案4

如果你不太反对这个想法,你可以将命令行工具复制到 Windows\System32 目录。然后你就可以从任何目录运行它们,就像 ping 或 ipconfig 一样。

编辑
经过一番尝试,这是可行的。你只需要使用分号来分隔目录。假设你在“folder1”和“folder2”中有一个程序。你可以像这样写你的路径:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

然后,您可以直接从命令行调用任一目录中的程序。据我所知,没有其他方法可以仅用一行来执行此操作。

支持信息: http://en.wikipedia.org/wiki/PATH_(变量)

相关内容