所以我们的DNS somtimes有点不对,并给出了错误的地址。 所以我创建了这段代码,以确保我的脚本在正确的计算机上运行。
然而它总是失败 它永远不会匹配IF?
提取:
SET /P Computer=Type here
psexec \\%Computer% hostname >hostname.log
for /f "delims=" %%x in (hostname.log) do set hostname=%%x
if not %hostname% == %computer% goto loopstart
答案 0 :(得分:0)
始终将您的设置变量用双引号括起来。正如@Stephan在上面的评论中提到的那样,set hostname=%%x
之后会有一个空格,这将导致输入+空格不会与输入匹配,因为你正在进行==
意味着完全匹配。
另外,为了进行可能存在空格的匹配,可以在if语句的变量周围添加双引号(虽然在这种情况下,PC名称不能包含空格)
SET /P "Computer=Type here: "
psexec \\%Computer% hostname >hostname.log
for /f "delims=" %%x in (hostname.log) do set "hostname=%%x"
if not "%hostname%" == "%computer%" goto loopstart
您也可以测试结果:
SET /P "Computer=Type here: "
for /f "delims=" %%x in (hostname.log) do set "hostname=%%x"
echo Hostname: "%hostname%" Computer: "%computer%"
请注意,上述内容仅匹配区分大小写的对象。因此PC1
与Pc1
不匹配,但PC1
将与PC1
匹配
答案 1 :(得分:0)
如果您的Computer
名称不能包含空格,则可以使用此名称:
Set /P "Computer=Type here "
For /F %%A In ('PsExec \\%Computer% HostName'
) Do If /I Not %%A==%Computer% (GoTo loopstart)
如果您的Computer
可以包含空格,则以下内容可能有效,(未经测试的双引号\\%Computer%
):
Set /P "Computer=Type here "
For /F "EOL=| Delims=" %%A In ('PsExec "\\%Computer%" HostName'
) Do If /I Not "%%A"=="%Computer%" (GoTo loopstart)
在任何一种情况下,如果您需要使用输出If
,您始终可以将If
语句更改为Else
/ %%A
。 (我已将GoTo
命令括在括号中,尤其是为此目的,否则可以选择删除它们。