Board logo

标题: [文本处理] 请教批处理命令findstr的异常问题 [打印本页]

作者: sinun    时间: 2014-12-9 23:51     标题: 请教批处理命令findstr的异常问题

本帖最后由 sinun 于 2014-12-12 21:56 编辑

请教老师们一个findstr的异常问题,先多谢了!!!
如下,注册表值改为第一个0000041E输出异常,输出“没找到“,但改为第二个00000409又输出正常,输出“找到了“。注册表值除了第二个正常外,其余的返回值都是错的,不知是哪里出错了?请高手们帮帮忙!
  1. @echo off
  2. reg query "HKEY_CURRENT_USER\Control Panel\International" /v Locale|findstr "0000041E 00000409 00001401 00003C01 00000C01 00001C01 00000439" >nul 2>nul&& goto LocaleOK || goto LocaleNG
  3. :LocaleOK
  4. echo,找到了
  5. pause&exit
  6. :LocaleNG
  7. echo,没找到
  8. pause
复制代码

作者: sinun    时间: 2014-12-11 00:41

哪位大师帮忙解决下?不胜感激!
作者: amwfjhh    时间: 2014-12-11 16:48

第一与第二个区别是第一个中带有英文字符,看看是否存值时作了大小写转变,将findstr 加个/i参数试试。
作者: sinun    时间: 2014-12-12 21:51

第一与第二个区别是第一个中带有英文字符,看看是否存值时作了大小写转变,将findstr 加个/i参数试试。
amwfjhh 发表于 2014-12-11 16:48


第一个中带有英文字符,但第三个和最后一个不带英文字符的返回值也是错的,将findstr 加/i也是同样NG,现在不知道哪里出问题了!
作者: c755731262    时间: 2014-12-13 18:40

没看懂你到底想说的问题在哪
你想说的是把findstr 后面的任意一个字符串作为键值来检测么
作者: sinun    时间: 2014-12-13 20:19

回复 5# c755731262

是,就是这个意思。为什么只有第二个字符串检测正确,其余都是错的?
作者: apang    时间: 2014-12-13 20:34

回复 6# sinun


    先修改注册表值为0000041E,然后分别执行下面两个批处理,把a.txt和b.txt内容发出来看看
  1. @echo off
  2. reg query "HKEY_CURRENT_USER\Control Panel\International" /v Locale>a.txt
  3. pause
复制代码
  1. @echo off
  2. reg query "HKEY_CURRENT_USER\Control Panel\International" /v Locale|findstr "0000041E">b.txt
  3. pause
复制代码

作者: sinun    时间: 2014-12-13 22:25

回复 7# apang

注册表改成0000041E后,a.txt的内容如下:
  1. ! REG.EXE VERSION 3.0
  2. HKEY_CURRENT_USER\Control Panel\International
  3.     Locale REG_SZ 0000041E
复制代码
b.txt内容是空,cmd显示“无法设置区域设置”
作者: apang    时间: 2014-12-13 22:39

本帖最后由 apang 于 2014-12-13 22:48 编辑

回复 8# sinun


    你用的什么系统啊?难道不支持findstr ?
老老实实用 for,试试
  1. @echo off
  2. for %%a in (041E 0409 1401 3C01 0C01 1C01 0439) do set "_0000%%a=1"
  3. set "key=HKCU\Control Panel\International"
  4. for /f "tokens=1,3" %%a in ('reg query "%key%" /v Locale') do (
  5.         if /i "%%a" == "Locale" (
  6.                 if defined _%%b (goto :LocaleOK) else goto :LocaleNG
  7.         )
  8. )
  9. echo,指定的注册表项或值不存在
  10. pause & exit /b
  11. :LocaleOK
  12. echo,找到了
  13. pause&exit
  14. :LocaleNG
  15. echo,没找到
  16. pause
复制代码

作者: sinun    时间: 2014-12-13 23:24

回复 9# apang


系统是XP SP3,不知为什么用findstr有些不对。用for也可以解决问题,谢谢大师!




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