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

[文本处理] 批处理查看文件里面是否有固定的字符串,然后做不同处理,结果很诡异,求解释?

[复制链接]
发表于 2015-1-11 00:52:45 | 显示全部楼层 |阅读模式
脚本如下所示,主要是现在select_sqlserver.log中看是否有"0 行受到影响" 字符串,有则重启主机上相应服务,否则打印日志到文件restart.log。
结果很诡异,居然if 和else中相应语句都会执行,迷茫了。
  1. set /p str1=findstr "0 行受到影响" select_sqlserver.log
  2. set str2="(0 行受到影响)"
  3. echo %str1% >> C:\restart.log
  4. echo %str2% >> C:\restart.log
  5. if "%str1%"=="%str2%" (
  6. date /t >> C:\restart.log
  7. echo %time% >> C:\restart.log
  8. net stop MSSQLServerOLAPService /y
  9. net stop SQLAgent$INSTANCE1 /y
  10. net stop MSSQL$INSTANCE1 /Y
  11. ping -n 5 127.1>null
  12. net start MSSQL$INSTANCE1
  13. net start SQLAgent$INSTANCE1
  14. ping -n 10 127.1>null
  15. net start MSSQLServerOLAPService
  16. date /t >> C:\restart.log
  17. echo %time% >> C:\restart.log
  18. echo "restart SQL SERVER successfully" >> C:\restart.log
  19. ) else (
  20. date /t >> C:\restart.log
  21. echo %time% >> C:\restart.log
  22. echo "restart SQL SERVER failed" >> C:\restart.log
  23. )
复制代码
restart.log日志记录文件如下:
"(0 行受到影响)"
2015-01-09 星期五
17:51:37.91
2015-01-09 星期五
17:52:16.00
"restart SQL SERVER successfully"
2015-01-09 星期五
17:52:16.00
"restart SQL SERVER failed"
发表于 2015-1-11 02:08:24 | 显示全部楼层
因为你的 %str2% 中含有双引号,导致错误的语法解析
set str2="(0 行受到影响)"


解决办法是用变量延迟:

  1. ......

  2. setlocal enabledelayedexpansion
  3. if "!str1!"=="!str2!" (
  4. .......
复制代码
 楼主| 发表于 2015-1-11 22:58:47 | 显示全部楼层
回复 2# CrLf


    太感谢了,困扰了很久
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 22:54 , Processed in 0.020548 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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