找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30373|回复: 8

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

[复制链接]
发表于 2015-11-1 18:17:44 | 显示全部楼层 |阅读模式
本帖最后由 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}\
复制代码
这样形式的,第二行在前,第一行在后面跟接,原始文本结果中是有空行的。
发表于 2015-11-1 18:47:50 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

 楼主| 发表于 2015-11-1 18:56:20 | 显示全部楼层
回复 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}\
后面的都对。
发表于 2015-11-1 19:15:10 | 显示全部楼层
回复 3# freesoft00
已修改
 楼主| 发表于 2015-11-1 19:27:36 | 显示全部楼层
回复 4# bailong360


    第三个问题好了。
第二个问题是否有解?
注册表某一个项下面包括子项(不包括键和键值)只显示最后一个\后面的内容。
发表于 2015-11-1 19:32:04 | 显示全部楼层
回复 5# freesoft00
不是给出解决方案了吗,当成路径处理就好了,用%%~nxi扩展
发表于 2015-11-1 20:33:11 | 显示全部楼层
第二个问题
  1. grep -Po "(?<=\\)ww\d+" 1.txt | gawk "!a[$1]++"
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 多谢!

查看全部评分

 楼主| 发表于 2015-11-1 20:39:32 | 显示全部楼层
回复 6# bailong360
我运行了,得到的结果不对。我再试试吧
发表于 2015-11-1 22:34:39 | 显示全部楼层
回复 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
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 十分感谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 03:07 , Processed in 0.020625 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表