Board logo

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

作者: batpro    时间: 2011-7-6 09:52     标题: [已解决]批处理如何将文本中指定特征的行分别与其下多行字符串合并

本帖最后由 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
复制代码
说明:手工操作过程是:先剪切→\归属的注册表路径,在复制到各自对应的下方
作者: wolonga123    时间: 2011-7-6 10:33

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

作者: CrLf    时间: 2011-7-6 10:41

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

作者: batpro    时间: 2011-7-6 11:08

3# zm900612

不符合题意
作者: CrLf    时间: 2011-7-6 11:16

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

作者: batpro    时间: 2011-7-6 11:21

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
作者: batpro    时间: 2011-7-6 11:23

5# zm900612


恩,好代码,但是怎么,去除空格呢
作者: CrLf    时间: 2011-7-6 11:24

6# batpro


那个空格是 1.txt 中自带的...
如果空格固定为三个,可以把 !var! 换成 !var:~,-3!
作者: batpro    时间: 2011-7-6 11:49

8# zm900612

谢谢版主,问题解决

另外问一句,假设不知道1.txt里面自动的空格是多少,有其他方法么?【因为处理文本时也可能因为各种原因出现这样的情况】
作者: CrLf    时间: 2011-7-6 12:00

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

作者: mstsc    时间: 2011-7-6 13:24

好强大啊。for用的地方好多啊,一定要把for弄清楚怎么用




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