我的主文件夹中有一个目录,用于放置命令行软件(CMD_Software)。为了避免混乱,我将每个软件都放在CMD_Software中自己的目录中。
我想在PATH变量中输入一个条目,该条目将允许从命令行访问CMD_Software及其包含的所有目录。
我尝试了,C:\Users\myuser\CMD_Software\*
但是什么也没做。那就是我没有想法的地方。
请注意,我不是在终端中尝试设置新路径,而是在系统属性的“高级”选项卡上的“环境变量”中尝试设置新路径。
我的主文件夹中有一个目录,用于放置命令行软件(CMD_Software)。为了避免混乱,我将每个软件都放在CMD_Software中自己的目录中。
我想在PATH变量中输入一个条目,该条目将允许从命令行访问CMD_Software及其包含的所有目录。
我尝试了,C:\Users\myuser\CMD_Software\*
但是什么也没做。那就是我没有想法的地方。
请注意,我不是在终端中尝试设置新路径,而是在系统属性的“高级”选项卡上的“环境变量”中尝试设置新路径。
Answers:
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
)
每当这成为问题时,我都将退回到批处理文件方法。
这就是我用来解决问题的方法。在下面复制此脚本,并将其另存为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
首先运行,然后输入命令(例如grep
或exiftool
),如下所示:
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的回答
如果您对此想法不太满意,可以将命令行工具复制到Windows \ System32目录。然后,您可以从任何目录运行它们,就像ping或ipconfig一样。
编辑
经过一番修补,这是可能的。您只需要使用分号来分隔目录。假设您在“ folder1”和“ folder2”中有一个程序。您将这样编写路径:
c:\folder1\;c:\folder2\;c:\folder3\; etc....
然后,您可以直接从命令行在任一目录中调用程序。AFAIK没有其他方法可以仅凭一行执行此操作。