Board logo

标题: [文本处理] [已解决]批处理命令findstr处理带空格并且设定起始终止条件的过滤 [打印本页]

作者: freesoft00    时间: 2015-11-1 18:17     标题: [已解决]批处理命令findstr处理带空格并且设定起始终止条件的过滤

本帖最后由 freesoft00 于 2015-11-1 23:02 编辑

第一个问题:
文本如下:
  1. www 2009
  2. www 2009 64
复制代码
用findstr过滤只显示第一个,
findstr /ic:"www 2009"
但是这样第二条也显示出来了。更改为
findstr /irc:"www 2009$"
可以,不知道这样写对不对?

第二个问题:
文本如下:
  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update\ww12345
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update\ww22222
复制代码
我需要只显示注册表最后的注册表项名,就是ww12345、ww22222,规律就是前面都有一个ww,这个我知道可以用for截取到。
但是如果这个注册表项的子目录也有相同规律的项名那么应该如何截取呢?
比如同时有HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update\dx\ww3333
,最后截取的文本是ww22222、ww12345、ww3333,还有些是这样的ww34567v4、ww8800v6,我想把这样的后面带v的后面部分去掉,只保留前面的ww+数字,就是:
ww22222、ww12345、ww3333、ww34567、ww8800
文件名中有重复的内容,同时需要去重


第三个问题:
mountvol命令运行的结果,类似如下:
  1.     \\?\Volume{11111-222222-1111-1111-1111111111}\
  2.         *** 无装入点 ***
  3.     \\?\Volume{11111-333333-1111-1111-1111111111}\
  4.         C:\
  5.     \\?\Volume{11111-111111-1111-1111-1111111111}\
  6.         F:\
复制代码
如何使结果变为
  1. *** 无装入点 *** \\?\Volume{11111-222222-1111-1111-1111111111}\
  2. C:\ \\?\Volume{11111-333333-1111-1111-1111111111}\
  3. F:\ \\?\Volume{11111-111111-1111-1111-1111111111}\
复制代码
这样形式的,第二行在前,第一行在后面跟接,原始文本结果中是有空行的。
作者: bailong360    时间: 2015-11-1 18:47

本帖最后由 bailong360 于 2015-11-1 19:14 编辑

1. Sure!
2.
  1. (1) for %%i in (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update\dx\ww3333) do echo %%~nxi
  2. (2) for /f "delims=v" %%i in ("ww34567v4") do echo %%i
复制代码
3.
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in ('mountvol^|findstr "[\\\*]"') do (
  4.     if "!str:~,1!"=="\" echo %%i !str!
  5.     set str=%%i
  6. )
  7. pause
复制代码

作者: freesoft00    时间: 2015-11-1 18:56

回复 2# bailong360


    感谢,第三个问题,执行后,后面的都对,第一行错行了。
    \\?\Volume{11111111-ed111-1111-1111-8111111111113}\
        *** 无装入点 ***
不是变为了
*** 无装入点 ***   \\?\Volume{11111111-ed111-1111-1111-8111111111113}\
而是和第二行的在一行上面了
\\?\Volume{0222222-e222-1222-2222222222222222222222}\ \\?\Volume{11111111-ed111-1111-1111-8111111111113}\
后面的都对。
作者: bailong360    时间: 2015-11-1 19:15

回复 3# freesoft00
已修改
作者: freesoft00    时间: 2015-11-1 19:27

回复 4# bailong360


    第三个问题好了。
第二个问题是否有解?
注册表某一个项下面包括子项(不包括键和键值)只显示最后一个\后面的内容。
作者: bailong360    时间: 2015-11-1 19:32

回复 5# freesoft00
不是给出解决方案了吗,当成路径处理就好了,用%%~nxi扩展
作者: DAIC    时间: 2015-11-1 20:33

第二个问题
  1. grep -Po "(?<=\\)ww\d+" 1.txt | gawk "!a[$1]++"
复制代码

作者: freesoft00    时间: 2015-11-1 20:39

回复 6# bailong360
我运行了,得到的结果不对。我再试试吧
作者: /zhqsystem/zhq    时间: 2015-11-1 22:34

回复 5# freesoft00
显示项和子项下的所有项不包含值名和数据
  1. @echo off
  2. :1
  3. for /f "delims=" %%i in ('reg.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update" /s') do (
  4. reg.exe query "%%i" >nul 2>nul&&(
  5.   echo.%%~nxi
  6. )
  7. )
  8. pause
复制代码





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