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

[文本处理] [已解决]批处理如何将文本中指定特征的行分别与其下多行字符串合并

[复制链接]
发表于 2011-7-6 09:52:51 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-9 23:35 编辑

这样处理文本:补充完整路径
在1.txt中有
  1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run   
  2. →\SigmatelSysTrayApp
  3. →\UIUCU
  4. →\KAV50
  5. →\FIPExpert
  6. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  7. →\DAEMON Tools-1033
  8. →\yassistse
  9. →\YLive.exe
  10. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  11. →\config.exe
复制代码
如何生成
2.txt:

  1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run→\SigmatelSysTrayApp
  2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run→\UIUCU
  3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run→\KAV50
  4. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run→\FIPExpert

  5. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run→\DAEMON Tools-1033
  6. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run→\yassistse
  7. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run→\YLive.exe

  8. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run→\config.exe
复制代码
说明:手工操作过程是:先剪切→\归属的注册表路径,在复制到各自对应的下方

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 乐于助人

查看全部评分

发表于 2011-7-6 10:33:48 | 显示全部楼层
1# batpro

  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. For /F "tokens=*" %%i IN (test.txt) Do (
  4.     set "str=%%i"
  5.     if "!str:~,1!" equ "→" (
  6.        if defined var (echo !var!&echo %%i) ELSE echo %%i
  7.     ) else set var=%%i
  8. )
  9. pause
复制代码

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 乐于助人

查看全部评分

发表于 2011-7-6 10:41:36 | 显示全部楼层
借用 terse 的代码:
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "tokens=*" %%i IN (1.txt) Do (
  3.     set "str=%%i"
  4.     if "!str:~1,1!" equ "" (
  5.        if defined var echo; & set<nul /p=!var! & set var=
  6.        set /p"=%%i"<nul
  7.     ) else set var=!str!
  8. ))>2.txt
  9. pause
复制代码
 楼主| 发表于 2011-7-6 11:08:02 | 显示全部楼层
3# zm900612

不符合题意
发表于 2011-7-6 11:16:10 | 显示全部楼层
4# batpro

搞错了...那样更简单的了:
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "tokens=*" %%i IN (1.txt) Do (
  3.     if "%%~pi"=="%~p0→" (
  4.        echo !var!%%i
  5.     ) else set var=%%i
  6. ))>2.txt
  7. pause
复制代码
 楼主| 发表于 2011-7-6 11:21:03 | 显示全部楼层
2# wolonga123

谢谢提醒,用你的代码,我自己写了个:
  1. @echo off
  2. cd.>temp_1.txt
  3. SetLocal EnableDelayedExpansion
  4. For /F "tokens=*" %%i IN (1.txt) Do (
  5.     set "str=%%i"
  6.     if "!str:~,1!" equ "→" (
  7.        if defined var (echo !var!&echo %%i) ELSE echo %%i
  8.     ) else set var=%%i
  9. )>>temp_1.txt
  10. @echo off>temp_2.txt&set n=1
  11. FOR /f "delims=" %%1 in (temp_1.txt) do (
  12. 2>nul    set /a n+=1,f=n%%2,1/f&&echo,%%1||set/p=%%1<nul
  13. ) >>temp_2.txt
  14. cd.>2.txt
  15. for /f "tokens=*" %%i in (temp_2.txt) do echo,%%i>>2.txt
复制代码
目前的问题是怎么去除“Run” 与  “→\”前的空格
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run   →\SigmatelSysTrayApp
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run   →\UIUCU
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run   →\KAV50
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run   →\FIPExpert
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run →\DAEMON Tools-1033
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run →\yassistse
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run →\YLive.exe
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run→\config.exe
 楼主| 发表于 2011-7-6 11:23:05 | 显示全部楼层
5# zm900612


恩,好代码,但是怎么,去除空格呢
发表于 2011-7-6 11:24:26 | 显示全部楼层
6# batpro


那个空格是 1.txt 中自带的...
如果空格固定为三个,可以把 !var! 换成 !var:~,-3!
 楼主| 发表于 2011-7-6 11:49:31 | 显示全部楼层
8# zm900612

谢谢版主,问题解决

另外问一句,假设不知道1.txt里面自动的空格是多少,有其他方法么?【因为处理文本时也可能因为各种原因出现这样的情况】
发表于 2011-7-6 12:00:41 | 显示全部楼层
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "tokens=*" %%i IN (1.txt) Do (
  3.     if "%%~pi"=="%~p0→" (
  4.        echo !var:%cd%\=!→\%%~nxi
  5.     ) else set var=%%~fi
  6. ))>2.txt
  7. pause
复制代码
发表于 2011-7-6 13:24:24 | 显示全部楼层
好强大啊。for用的地方好多啊,一定要把for弄清楚怎么用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:05 , Processed in 0.013463 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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