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

[文本处理] [已解决]批处理命令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}\
复制代码
这样形式的,第二行在前,第一行在后面跟接,原始文本结果中是有空行的。

回复 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

评分人数

这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 6# bailong360
我运行了,得到的结果不对。我再试试吧

TOP

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

评分人数

TOP

回复 5# freesoft00
不是给出解决方案了吗,当成路径处理就好了,用%%~nxi扩展

TOP

回复 4# bailong360


    第三个问题好了。
第二个问题是否有解?
注册表某一个项下面包括子项(不包括键和键值)只显示最后一个\后面的内容。

TOP

回复 3# freesoft00
已修改

TOP

回复 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}\
后面的都对。

TOP

本帖最后由 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

评分人数

TOP

返回列表