我的主文件夹中有一个目录,用于放置命令行软件 (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
然后输入命令(例如grep
或exiftool
),如下所示:
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
答案3
在 ...\CMD_Software 下(或实际上任何地方)放置一个“programlinks\”子目录,并用符号链接或硬链接填充要访问的每个可执行文件。然后在 PATH 中为 ...\programlinks 添加一个条目就足够了。
答案4
如果你不太反对这个想法,你可以将命令行工具复制到 Windows\System32 目录。然后你就可以从任何目录运行它们,就像 ping 或 ipconfig 一样。
编辑
经过一番尝试,这是可行的。你只需要使用分号来分隔目录。假设你在“folder1”和“folder2”中有一个程序。你可以像这样写你的路径:
c:\folder1\;c:\folder2\;c:\folder3\; etc....
然后,您可以直接从命令行调用任一目录中的程序。据我所知,没有其他方法可以仅用一行来执行此操作。