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

Lan*_*ard 28 windows command-line environment-variables windows-8

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

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

我试过了,C:\Users\myuser\CMD_Software\*但什么也没做。这就是我没有想法的时候。

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

efo*_*nis 22

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

我有时使用了两种可能的解决方法:

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

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 给 CMD.EXE 添加别名:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

CLS & (
CMD_Software
)
Run Code Online (Sandbox Code Playgroud)

每当这成为一个问题时,我只是回退到批处理文件方法。


Vin*_*yak 5

这就是我用来解决问题的方法。复制下面的脚本并将其保存到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),如下所示:

微软Windows [版本6.3.9600]
(c) 2013 微软公司。版权所有。

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


FIXPATH.BAT

setlocal 启用延迟扩展
cd /D %~dp0

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

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

感谢@VonC的回答


Lee*_*son -2

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

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

c:\folder1\;c:\folder2\;c:\folder3\;    etc....
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这没有多大意义。 1. 这将删除 [PATH 变量](http://en.wikipedia.org/wiki/PATH_\(variable\)) 之前的所有内容。 2. PATH 变量将仅包含文件夹,而不包含其子目录(所需的结果)。 3. 将 `program.bat` 作为 `%PATH%\program.bat` 调用或多或少与 PATH 的设计目的相反。 (2认同)