[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

脚本如下所示,主要是现在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"

因为你的 %str2% 中含有双引号,导致错误的语法解析
set str2="(0 行受到影响)"


解决办法是用变量延迟:
  1. ......
  2. setlocal enabledelayedexpansion
  3. if "!str1!"=="!str2!" (
  4. .......
复制代码

TOP

回复 2# CrLf


    太感谢了,困扰了很久

TOP

返回列表