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

[文本处理] 新人学习,文本替换

本帖最后由 zydrawer 于 2018-2-6 19:52 编辑

先贴码:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (findfile.txt)do (
        set /a num=0
        set h1=%%a
        echo %%a
        for /f "tokens=1,2 delims=        " %%i in (key.txt)do (
                set h2=!h1:%%i=%%j!
                if !h1! neq !h2! (
                                echo !h2! >>d.txt
                        )else (
                        if !num! == 0 (
                        echo !h2! >>d.txt
                        set /a num = num+1
                        ))
                        ))
set num=
pause
目的:查找关键字并将其替换为指定字符串
有两个文本文档.txt      findfile.txt         key.txt
key.txt是关键字文本有两列 之间是与tab键隔开,形式如下
第一列            第二列
11111            aaaaa
222222          bbbbbbbb
pppp              cccccccc
。。。            。。。。
findfile.txt 文件是待查找文件 这个文件的内容中是含有key.txt文件中第一列的关键字
找到第一列的关键字后用第二列的字符串替换掉第一列的关键字
其他不变,然后将结果输出到另一个文件中

问题:
我写的bat处理命令虽将字符串替换成功,但是也将没有替换的行也重复输出了,
花了好久时间也没有找到原因,拜托各位前辈大神了

回复 2# 523066680


    你这打击新人的积极性么

TOP

回复 5# /zhqsystem/zhq


    首先感谢答主热心解答。
关于答主的if /i "%%i"=="%%k" 有些不解,
可能是我描述问题不清楚,之前没有对findfile.txt进行说明
findfile.txt只是包含有key.txt中第一列的关键字,也就是说关键字只是findfile.txt中每一行的子串,关键字位置并不在行首
所以我认为这里不应该用等号吧

TOP

回复 4# yhcfsr


    感谢指出不足指出
我运行后的结果是,无论有没有替换,它都会输出原行(未经替换的行),若是存在替换的过程,他会在打印原行之后再次打印替换后的行(这个先后循序,然我感到很迷惑,就像是先执行了else语句后再执行if语句)
而我要求是:若不存在要替换的关键字,则直接打印输出,若存在,则只打印输出替换后的行

TOP

再次看到4楼5楼的回复时间,再次感谢

TOP

返回列表