返回列表 发帖

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

本帖最后由 pcl_test 于 2016-8-9 23:35 编辑

这样处理文本:补充完整路径
在1.txt中有
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run   
→\SigmatelSysTrayApp
→\UIUCU
→\KAV50
→\FIPExpert
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
→\DAEMON Tools-1033
→\yassistse
→\YLive.exe
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
→\config.exe COPY
如何生成
2.txt:
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
COPY
说明:手工操作过程是:先剪切→\归属的注册表路径,在复制到各自对应的下方
1

评分人数

1# batpro
@echo off
SetLocal EnableDelayedExpansion
For /F "tokens=*" %%i IN (test.txt) Do (
    set "str=%%i"
    if "!str:~,1!" equ "→" (
       if defined var (echo !var!&echo %%i) ELSE echo %%i
    ) else set var=%%i
)
pauseCOPY
1

评分人数

TOP

借用 terse 的代码:
@Echo Off&SetLocal EnableDelayedExpansion
(For /F "tokens=*" %%i IN (1.txt) Do (
    set "str=%%i"
    if "!str:~1,1!" equ "\" (
       if defined var echo; & set<nul /p=!var! & set var=
       set /p"=%%i"<nul
    ) else set var=!str!
))>2.txt
pauseCOPY

TOP

3# zm900612

不符合题意

TOP

4# batpro

搞错了...那样更简单的了:
@Echo Off&SetLocal EnableDelayedExpansion
(For /F "tokens=*" %%i IN (1.txt) Do (
    if "%%~pi"=="%~p0→\" (
       echo !var!%%i
    ) else set var=%%i
))>2.txt
pauseCOPY

TOP

2# wolonga123

谢谢提醒,用你的代码,我自己写了个:
@echo off
cd.>temp_1.txt
SetLocal EnableDelayedExpansion
For /F "tokens=*" %%i IN (1.txt) Do (
    set "str=%%i"
    if "!str:~,1!" equ "→" (
       if defined var (echo !var!&echo %%i) ELSE echo %%i
    ) else set var=%%i
)>>temp_1.txt
@echo off>temp_2.txt&set n=1
FOR /f "delims=" %%1 in (temp_1.txt) do (
2>nul    set /a n+=1,f=n%%2,1/f&&echo,%%1||set/p=%%1<nul
) >>temp_2.txt
cd.>2.txt
for /f "tokens=*" %%i in (temp_2.txt) do echo,%%i>>2.txtCOPY
目前的问题是怎么去除“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

@Echo Off&SetLocal EnableDelayedExpansion
(For /F "tokens=*" %%i IN (1.txt) Do (
    if "%%~pi"=="%~p0→\" (
       echo !var:%cd%\=!→\%%~nxi
    ) else set var=%%~fi
))>2.txt
pauseCOPY

TOP

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

TOP

返回列表