通过一个条目将目录和所有子目录添加到PATH变量


19

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

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

我尝试了,C:\Users\myuser\CMD_Software\*但是什么也没做。那就是我没有想法的地方。

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


您是否尝试过类似“ C:\ Users \ myuser \ CMD_Software *”的操作?
terdon

4
我认为这是不可能的。
哈里·约翰斯顿

Answers:


16

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”开关),并在命令解释程序开始使用注册表设置时使其自动运行(请参见中的“ AutoRun”键)。 CMD /?)。

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

CLS & (
CMD_Software
)

每当这成为问题时,我都将退回到批处理文件方法。


谢谢!第一种方法对我来说确实很好用,主要是因为在计算机之间传输数据时,我不必弄乱注册表。它也很整洁和方便,因为您在获得上述实用程序后只花了一点时间来创建bat文件。
cyqsimon

不幸的是,我必须尽快删除以前的陈述。在采用第一种方法后,脚本在执行过程中随机退出的过程中遇到了奇怪的问题。特别是,Windows的wget在完成下载后似乎喜欢杀死我的脚本。我花了两个多小时来痛苦地对脚本进行故障排除,但最终我尝试将所有exe文件扔到一个根目录中,所有问题都消失了。因此,在任何人使用此方法之前,我都强烈建议您谨慎行事。
cyqsimon

4

这就是我用来解决问题的方法。在下面复制此脚本,并将其另存为FIXPATH.BAT添加到PATH环境变量的文件夹中。例如:

C:\ Users \ 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

setlocal EnableDelayedExpansion
cd / D%〜dp0

为(。)中的/ R %% d做(
    设置“ dirs =!dirs!; %% d”
)

path =%path%!dirs!
(本地
    设置“ ret =%PATH%”
)
cmd / K“标题[#]固定路径[#] &&路径%ret%”
出口/ B

感谢@VonC的回答


1

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


1
这样做的主要问题是,如果可执行文件所依赖的任何库可能与exe位于同一目录中,则不会使用它们。或至少这就是我的尝试所发生的事情。
zero298

非常感谢@ zero298。尽管我愿意,但如果有人能百分百确定并能确认这确实是请进话。(因为这种方法绝对是最干净的方法。)
Henrik

-1

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

编辑
经过一番修补,这是可能的。您只需要使用分号来分隔目录。假设您在“ folder1”和“ folder2”中有一个程序。您将这样编写路径:

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

然后,您可以直接从命令行在任一目录中调用程序。AFAIK没有其他方法可以仅凭一行执行此操作。

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


1
这没有多大意义。1.这将删除PATH变量的所有先前内容。2. PATH变量将仅包含文件夹,而不包含其子目录(所需结果)。3.调用program.bat%PATH%\program.batPATH的目的相反。
丹尼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.