我正在尝试构建一个批处理脚本,该脚本使用集群实用程序来定义VARIABLE1。
第一个IF有一个完美的结果 - 如果列表中没有列出COMPUTERNAME,则设置VARIABLE1。
问题是如果ERRORLEVEL = 0.那么它应该找到以“WINSV”开头的字符串并排除%COMPUTERNAME%
cluster node | findstr /r "WINSV*" | findstr /v "%COMPUTERNAME%"
返回以下内容:
WINSV9999 1 Up
“cluster node”命令返回:
Node Node ID Status
-------------- ------- ---------------------
WINSV9999 1 Up
WINSV9998 2 Up
现在唯一缺少的是如何只将前8个字符打印到VARIABLE1变量中。 有什么线索在那里缺少什么?谢谢你的帮助。
set CLUSTERGROUP=CLUSTERNAME
cluster group | find /I "%CLUSTERGROUP%" | find /I "%COMPUTERNAME%" 1>nul 2>&1
if %ERRORLEVEL% GTR 0 (
set VARIABLE1=%COMPUTERNAME%
)
else (
cluster node | findstr /r "WINSV*" | findstr /v "%COMPUTERNAME%"
)
编辑: 现在正在使用这个:
set CLUSTERGROUP=CLUSTERNAME
call cluster group | find /I "%CLUSTERGROUP%" | find /I "%COMPUTERNAME%" 1>nul 2>&1
if %ERRORLEVEL% GTR 0 (
set VARIABLE1=%COMPUTERNAME%
) else (
for /F "tokens=1" %%I in ('call cluster node ^| findstr /r "WINSV*" ^| findstr /v "\<%COMPUTERNAME%\>"') do set "VARIABLE1=%%I"
)
现在另一个问题,因为我在其他脚本中有其他错误级别,第一行不起作用。如何重新编码 - 如果节点名称(以CLUSTERNAME开头的行中的值WINSV9999)与%COMPUTERNAME%不匹配,则输出到VARIABLE1应为%COMPUTERNAME%。对此有何帮助?谢谢!
c:>cluster group
Listing status for all available resource groups:
Group Node Status
-------------------- --------------- ------
Available Storage WINSV9999 Offline
Cluster Group WINSV9999 Online
CLUSTERNAME WINSV9999 Online