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

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

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

评分人数

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

评分人数

TOP

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

TOP

3# zm900612

不符合题意

TOP

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

TOP

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

TOP

5# zm900612


恩,好代码,但是怎么,去除空格呢

TOP

6# batpro


那个空格是 1.txt 中自带的...
如果空格固定为三个,可以把 !var! 换成 !var:~,-3!

TOP

8# zm900612

谢谢版主,问题解决

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

TOP

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

TOP

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

TOP

返回列表