windows 仅提供服务器名称的批处理脚本

dly7yett  于 2023-02-16  发布在  Windows
关注(0)|答案(1)|浏览(151)

我有几个服务器名称的列表,其中包含服务器名称+环境的组合
示例:VHS001 DEV、VHS002 UAT、VHS003 PROD。我需要过滤环境名称,只需要服务器名称。
下面是我尝试的代码,但我只能得到第一个服务器名称,其余的服务器被忽略。请帮助修复代码:

set serverlist=%serverlist%
for /f "tokens=1 delims= " %%a in ("%serverlist%") do ( 
    set server=%%a
    echo !server!

%服务器列表% = VHS001开发、VHS002用户验收测试、VHS003生产
前面的代码以%serverlist%的形式返回输出。
现在,我将其作为输入传递,以单独检索服务器名。

dohp0rv5

dohp0rv51#

你需要将你的列表拆分两次(因为它实际上是一个列表的列表)

@echo off
setlocal
set "serverlist=VHS001 DEV, VHS002 UAT, VHS003 PROD"
echo DEBUG: "%serverlist:,=","%"
for %%a in ("%serverlist:,=","%") do (
  for /f "tokens=1,2" %%b in ("%%~a") do echo %%b is %%c.
)

输出:

DEBUG: "VHS001 DEV"," VHS002 UAT"," VHS003 PROD"
VHS001 is DEV.
VHS002 is UAT.
VHS003 is PROD.

%%a是列表元素("子列表"),%%b是您的服务器名,%%c是您的环境(您可以忽略它-以防以后需要它)
外部的for将列表拆分为"server environment"元素(包括引号-因为空格,它们很关键),这是内部for /f循环进一步拆分元素的分隔符。
在调试行中,你可以看到三个"元素列表"。空格不重要,它们被内部的for /f循环删除了。

相关问题