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

[文本处理] 请教批处理命令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
复制代码

回复 9# apang


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

TOP

本帖最后由 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
复制代码
1

评分人数

    • sinun: 用for也可以解决问题,谢谢大师!技术 + 1

TOP

回复 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显示“无法设置区域设置”

TOP

回复 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
复制代码

TOP

回复 5# c755731262

是,就是这个意思。为什么只有第二个字符串检测正确,其余都是错的?

TOP

没看懂你到底想说的问题在哪
你想说的是把findstr 后面的任意一个字符串作为键值来检测么

TOP

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


第一个中带有英文字符,但第三个和最后一个不带英文字符的返回值也是错的,将findstr 加/i也是同样NG,现在不知道哪里出问题了!

TOP

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

TOP

哪位大师帮忙解决下?不胜感激!

TOP

返回列表