批处理脚本比较变量内的字符串

批处理脚本比较变量内的字符串

内容

我正在编写一个简短的脚本,向 GPO 中我的域主机文件中的每个人推送一个新行 - 不要问为什么我们不通过 DNS 来执行此操作,原因既有趣又广泛:)

在大多数情况下,这很简单,但是我在比较变量中的字符串时遇到了一个有点棘手的问题,即它似乎无法做到这一点。尽管如果我回显字符串,它们实际上是相同的,但字符串似乎不匹配。由于字符串不匹配,它只会无限地在 hosts 文件的末尾添加一行。

作为参考,这是我希望脚本遵循的流程:

如何

设置比较值 -> 在主机文件中搜索现有条目并将输出保存到变量 -> 如果匹配则比较变量,否则不执行任何操作

代码

@echo off
SET compare=10.1.1.1 test.testing.com
FOR /F "usebackq delims==`" %%A IN (`findstr /c:"10.1.1.1 test.testing.com"  %SystemRoot%\system32\drivers\etc\hosts`) do SET search=%%A
if NOT "%search%"=="%compare%" echo Do Something >> output.txt

如果我改变:

"%search%"=="%compare%"

到:

"sometext"=="sometext"

运行正常。如果我回显 %search% 和 %compare% 的输出,我会得到:

10.1.1.1 test.testing.com
10.1.1.1 test.testing.com

答案1

是的,

所以我最终弄清楚了,空格是我的问题。对脚本进行很小的更改即可解决该问题。

@echo off
SET compare=10.1.1.1 blah.blah.com
FOR /F "usebackq delims==`" %%A IN (`findstr /c:"blah.blah.com" %SystemRoot%\system32\drivers\etc\hosts`) do SET compared=%%A
if NOT "%compare%"=="%compared%" echo 10.1.1.1 blah.blah.com>> %SystemRoot%\system32\drivers\etc\hosts
set compare=
set compared=

相关内容