delims varible不匹配字符串

时间:2018-01-31 12:03:35

标签: batch-file string-comparison psexec

所以我们的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

2 个答案:

答案 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%"

请注意,上述内容仅匹配区分大小写的对象。因此PC1Pc1不匹配,但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命令括在括号中,尤其是为此目的,否则可以选择删除它们。