Windows PATH 上的批处理字符串搜索

bea*_*mit 5 windows inno-setup path batch-file

我正在 Windows 中编写一个批处理文件来运行安装后脚本,需要做的一件事是在系统路径中添加一个目录。

该脚本正在运行,它执行以下操作:

setx Path "%PATH%;c:\path\to\add" -m

这是正确设置路径,但如果用户重新安装程序,此脚本可能会多次运行。

我想搜索字符串,c:\path\to\add所以我不会一遍又一遍地向系统路径添加相同的路径。这在带有 的 Linux 中非常简单sed,但我不知道 Windows 中的命令是什么。我找到了findstr,但这似乎只适用于文件。

在不安装额外软件的情况下,这在 Windows 中是可能的吗?

编辑:

我正在使用 Inno Setup 创建安装可执行文件。

Ser*_*yuz 3

在专家提供一种合理的方法之前,冒着一些否决的风险,
下面的代码将从环境变量中删除特定路径(如果存在),以便可以再次添加它:

set str=%path%
:: str is the same with path

set str=%str:;C:\Path\To\Add=%
:: ";c:\path\to\add" is now removed from str

setx Path "%str%;c:\path\to\add" -m
:: proceed with setting the path
Run Code Online (Sandbox Code Playgroud)


例如,如果字符串实际上是路径的一部分,则存在删除该字符串的风险c:\path\to\add\somefolder。另外,如果路径实际上以 结尾\,或者它是第一个条目,但实际上不以 开头;,等等。

可以连续调用各种形式来规避其中一些,

set str=%str:;C:\Path\To\Add\;=;%
set str=%str:;C:\Path\To\Add;=;%
set str=%str:;C:\Path\To\Add\=%
set str=%str:C:\Path\To\Add\;=%
set str=%str:;C:\Path\To\Add=%
Run Code Online (Sandbox Code Playgroud)

但是,AAMOF 我不确定这是否是一种明智的做法。