标题: [文本处理] 批处理查看文件里面是否有固定的字符串,然后做不同处理,结果很诡异,求解释? [打印本页]
作者: flyguagua 时间: 2015-1-11 00:52 标题: 批处理查看文件里面是否有固定的字符串,然后做不同处理,结果很诡异,求解释?
脚本如下所示,主要是现在select_sqlserver.log中看是否有"0 行受到影响" 字符串,有则重启主机上相应服务,否则打印日志到文件restart.log。
结果很诡异,居然if 和else中相应语句都会执行,迷茫了。- set /p str1=findstr "0 行受到影响" select_sqlserver.log
- set str2="(0 行受到影响)"
- echo %str1% >> C:\restart.log
- echo %str2% >> C:\restart.log
- if "%str1%"=="%str2%" (
- date /t >> C:\restart.log
- echo %time% >> C:\restart.log
- net stop MSSQLServerOLAPService /y
- net stop SQLAgent$INSTANCE1 /y
- net stop MSSQL$INSTANCE1 /Y
- ping -n 5 127.1>null
- net start MSSQL$INSTANCE1
- net start SQLAgent$INSTANCE1
- ping -n 10 127.1>null
- net start MSSQLServerOLAPService
- date /t >> C:\restart.log
- echo %time% >> C:\restart.log
- echo "restart SQL SERVER successfully" >> C:\restart.log
- ) else (
- date /t >> C:\restart.log
- echo %time% >> C:\restart.log
- echo "restart SQL SERVER failed" >> C:\restart.log
- )
复制代码
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"
作者: CrLf 时间: 2015-1-11 02:08
因为你的 %str2% 中含有双引号,导致错误的语法解析
解决办法是用变量延迟:- ......
-
- setlocal enabledelayedexpansion
- if "!str1!"=="!str2!" (
- .......
复制代码
作者: flyguagua 时间: 2015-1-11 22:58
回复 2# CrLf
太感谢了,困扰了很久
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |