找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24710|回复: 8

[文本处理] [已解决] 批处理如何判断两块raid卡目前状态

[复制链接]
发表于 2016-10-8 10:32:20 | 显示全部楼层 |阅读模式
本帖最后由 ybbpgkfdn 于 2016-10-10 09:29 编辑

刚小弟看回复发现有大神,没看懂小弟的需求!那小弟就写的简单一点。
有两行英文其后面的Optimal是会变化的值。Optimal (代表正常)Uptimal(代表不正常)
我的需求是写一个批处理双击后会输出:[RAID卡一切正常] 或 [RAID10卡不正常],着样的文字提示。
RAID1_State               : Optimal  
RAID10_State               : Optimal   

我目前写到着里出来了很多问题:例如tokens=1,2 它取值是最后一行的两列!!!等等
@echo off  & setlocal enabledelayedexpansion
d:
::type raid.txt | find "State" >A.txt
for /f "tokens=1,2 delims=: " %%i in (A.txt) do set num1=%%i&& set num2=%%j
if "%num2%"=="Optimal" (echo "健康的RAID10") else echo "不健康的RAID10"
echo "%num1%"
echo "%num2%"
pause

不知道大家用过shell没有如果用shell大概写法是着样的
#/bin/bash
RAID=`grep "Optimal|wc -l"`
RAID1=`cat a.txt|awk -F ": " 'NR==1{print $2}'`
RAID10=`cat a.txt|awk -F ": " 'NR==2{print $2}'`
if [ $RAID -eq 2 ]
  then
    echo "RAID卡一切正常"
  else
     if [ "$RAID1" == "Optimal" ]
        then  
           echo "RAID10卡不正常"
        else
           echo "RAID1卡不正常"
     fi
fi

评分

参与人数 2PB +2 收起 理由
Batcher + 4 感谢给帖子标题标注[已解决]字样
pcl_test -2 未按版规发帖

查看全部评分

发表于 2016-10-8 11:40:52 | 显示全部楼层
不知所云                                 ~

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

发表于 2016-10-8 13:23:38 | 显示全部楼层
  1. @echo off
  2. type "D:\raid.txt" | find "State" >A.txt
  3. for /f "tokens=1,2 delims=: " %%i in (A.txt) do (
  4.     if "%%j"=="Optimal" (
  5.         echo "健康的%%i --- %%j"
  6.     ) else (
  7.         echo "不健康的%%i --- %%j"
  8.     )
  9. )
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
ybbpgkfdn + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2016-10-8 13:25:24 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. type "D:\raid.txt" | find "State" >A.txt
  4. for /f "tokens=1,2 delims=: " %%i in (A.txt) do (
  5.     if "%%j"=="Optimal" (
  6.         echo "健康的%%i --- %%j"
  7.     ) else (
  8.         echo "不健康的%%i --- %%j"
  9.     )
  10.     set "num1=%%i"
  11.     set "num2=%%j"
  12.     echo !num1! !num2!
  13. )
  14. pause
复制代码
发表于 2016-10-8 13:54:05 | 显示全部楼层
举个栗子
  1. @echo off&setlocal enabledelayedexpansion
  2. set optimal=正常
  3. set uptimal=不正常
  4. for /f "tokens=1-3 delims=_: " %%i in ('more +13 "%~f0"') do (
  5.     if /i "%%k"=="Optimal" set /a n+=1
  6.     set "#%%i=%%k"
  7. )
  8. if "%n%" equ "2" (
  9.     echo;RAID卡一切正常
  10. ) else (
  11.     for /f "tokens=1,2 delims=#=" %%i in ('set #') do echo;%%i!%%j!
  12. )
  13. pause&exit
  14. RAID1_State               : Optimal  
  15. RAID10_State               : Optimal
复制代码

评分

参与人数 1技术 +1 收起 理由
ybbpgkfdn + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2016-10-8 15:28:15 | 显示全部楼层
回复 3# GNU
非常感谢
我不太明白for do()的含义,为什么我不加括号只匹配最后一行的Optimal
 楼主| 发表于 2016-10-8 15:29:35 | 显示全部楼层
回复 5# pcl_test
非常感谢
太复杂了完全看不懂…………有没有好的书求推荐
发表于 2016-10-8 16:00:02 | 显示全部楼层
回复 7# ybbpgkfdn


    http://www.bathome.net/thread-5814-1-1.html
居家旅行, 杀人灭口必备手册
 楼主| 发表于 2016-10-8 16:15:02 | 显示全部楼层
回复 8# Bella

非常谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:26 , Processed in 0.040409 second(s), 18 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表