内容
我正在编写一个简短的脚本,向 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=