Board logo

标题: [文本处理] 数据库自动巡检批处理嵌套for变量疑问 [打印本页]

作者: taosicai    时间: 2015-6-17 18:16     标题: 数据库自动巡检批处理嵌套for变量疑问

新手编数据库自动巡检脚本,请各位大侠帮忙,万分感谢!
  1. @echo off
  2. setlocal DisableDelayedExpansion
  3. rem setlocal EnableDelayedExpansion
  4. for /f %%i in ('db2ilist') do (
  5.   echo %%i
  6.   for /f "tokens=1" %%s in ('wmic service get Name^, PathName ^| findstr db2sysc') do (
  7.     echo %%s
  8.     set n=%%s
  9.     echo %n%
  10.     if %%s == %%i (
  11.       echo Exist
  12.       echo ---
  13.     ) else (
  14.       echo Not
  15.       echo ---
  16.     )
  17.   )
  18.   echo ***
  19. )
复制代码
说明
1、db2ilist的返回值为如下2行:
DB2INST1
DB2
2、wmic service get Name, PathName | findstr db2sysc 的返回值为如下2行(不足10位后面补的空格):
DB2-0     
DB2INST1  
功能:判断进程对应的service服务是否已启动。
当前输出效果
DB2INST1
DB2-0
DB2INST1
Not
---
DB2INST1
DB2INST1
Exist
---
***
DB2
DB2-0
DB2INST1
Not
---
DB2INST1
DB2INST1
Not
---
***
问题:
1、输出的第16行应该是DB2,为什么成了DB2INST1 ?
2、echo %n%输出的3、7、13、17行,为什么全不对?
3、set n=%%s这行我想将-0换成空,这样写为什么不对 set n=%%s:-0=
4、代码第10行我是想这样写if %n% == %%i (  ,为什么这样后少了4个echo。
5、求正确的第8和第10行代码。
作者: gawk    时间: 2015-6-17 18:52

你的代码有问题的地方比较多,先试试下面这个代码和你的实际需求有哪些差异。

@echo off
setlocal EnableDelayedExpansion
for /f %%i in ('db2ilist') do (
  echo %%i
  for /f "tokens=1" %%s in ('wmic service get Name^, PathName ^| findstr db2sysc') do (
    echo %%s
    set n=%%s
    echo !n!
    if %%s == %%i (
      echo Exist
      echo ---
    ) else (
      echo Not
      echo ---
    )
  )
  echo ***
)
作者: taosicai    时间: 2015-6-18 10:44

结果正确,但第3个问题我还是不会处理。
作者: gawk    时间: 2015-6-18 13:13

回复 3# taosicai


@echo off
setlocal EnableDelayedExpansion
for /f %%i in ('db2ilist') do (
  echo %%i
  for /f "tokens=1" %%s in ('wmic service get Name^, PathName ^| findstr db2sysc') do (
    echo %%s
    set n=%%s
    set n=!n:-0=!
    echo !n!
    if %%s == %%i (
      echo Exist
      echo ---
    ) else (
      echo Not
      echo ---
    )
  )
  echo ***
)




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2