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

[文本处理] 求助批处理按顺序替换的问题

[复制链接]
发表于 2025-8-19 18:21:47 | 显示全部楼层 |阅读模式
各位高手,遇到一个文本替代的问题,请大家帮助。

我有两个文件,第1个文件如下:
name1
name2
name3
name4
....

第2文件如下:
reg1
reg2
reg3
reg4
....

上面文件名称的排列顺序是对应的,即:name1对应reg1,name2对应reg2,name3对应reg3......

如何编写一个批处理命令,将文件1中的name1,name2,name3.... 按照排列顺序用文件2中的名称逐次进行替代?感谢帮助!
发表于 2025-8-19 19:52:16 | 显示全部楼层
读第1遍不懂,读第2遍不懂,读第3遍头疼...
发表于 2025-8-19 20:29:25 | 显示全部楼层
本帖最后由 Five66 于 2025-8-19 20:34 编辑

是这样子不??

  1. move /y "第二个文件" "第一个文件"
复制代码
发表于 2025-8-19 20:32:04 | 显示全部楼层
回复 1# delab-1


是否直接用第二个文件就是了,或如 copy 2.txt 1.txt 即可?
发表于 2025-8-19 21:43:06 | 显示全部楼层
回复 3# Five66
回复 4# Five66

    兄弟审题不严啊!----:我有两个文件,,,,欲  文本替代  -----
1文件
name1
name2
name3
name4
....
2文件
reg1
reg2
reg3
reg4
....
--我的理解是这样的:在1文件内容name11文件基本来说就是变量组),查找在2文件文本 reg1替代为name1,然后再 reg1查找reg2 ,,,,,,,
思路嘛!,FOR,,FIND 找到 reg12文件里的的行号 然后在TYPE 重新 写进 2文件的时候  ,IF 行号,匹配到行号了,把  reg1 行内容 替换成 name1 行内容,,,

在批处理下,一行节段内容替换替换有点难,要拆解行内容,找到内容,变量替换(行内容 SET 行变量=%行变量:reg1=name1%),不过这样写很容易出现,多个reg1,2,3,4存在所在行完全匹配的问题,,有点复杂,有点乱,,整行替换比较好写,,,
发表于 2025-8-19 23:40:52 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-19 23:49 编辑


根据一楼示例及说明可推断如下》
一。name1和reg1均为全行匹配
二。楼主又说明 "排列顺序是对应的" 应理解为行号对应
由以上约束条件完成的替换结果其实就是文件一变为文件二。
当然最终尚须楼主确认或澄清。
发表于 2025-8-20 08:47:11 | 显示全部楼层
回复 1# delab-1


请给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2025-8-20 15:41:34 | 显示全部楼层
回复 5# jiavip

感觉还是楼主的说明有问题
替换一般有三个变数:从xxx中查找yyy替换成zzz
楼主的说明只说明了2个:从1.txt中查找1.txt中的name替换成2.txt中对应的reg
1.txt既是查找文本又是查找内容 ,自己查找自己 ,感觉挺奇妙的
或许是楼主少说明了一个txt
 楼主| 发表于 2025-9-6 23:13:51 | 显示全部楼层
感谢大家的回复,可能是我写的不够清楚,不过已经解决了。谢谢大家。用了两个方法解决这个问题。(方法1):是自己想出来的,比较简单且实用;(方法2):咨询了一下AI,建议了"findstr /n" 这个功能,这个功能提供两个文件内容里要素的行号,也可以实现对应位置的替换,但是稍微复杂点。下面是具体程序:
两个方法的核心都是讲对应的元素按照两个文件中的位置次序写在一起,然后再用for /f "tokens=1,2"再在需要替换的文件(我的案例是word文件)中进行内容替换。
方法1:
  set numb=0
    @echo off
    (for /f "skip=1" %%b in (temp_%%a.txt) do (
        set /a numb=!numb!+1
        echo Tab!table!_N!numb!,%%b)) >temp_rpc_!table!.txt
                                            
                        )

方法2:
@echo off
setlocal enabledelayedexpansion

set "file1=name_list.txt"
set "file2=reg.txt"
set "output=merged.txt"
set "delimiter=    "  :: 此处为制表符(按Tab键生成)

:: 清空或创建输出文件
type nul > "%output%"

:: 逐行合并
(
    for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%file1%"') do (
        set "line1=%%b"
        set /a line_num=%%a
        set "line2="
        for /f "tokens=1* delims=:" %%c in ('findstr /n "^" "%file2%"') do (
            if %%c equ !line_num! set "line2=%%d"
        )
        echo(!line1!!delimiter!!line2!
    )
) > "%output%"
endlocal
发表于 2025-9-7 00:02:39 | 显示全部楼层
回复 9# delab-1

原来楼主想要的处理结果 3.txt 就是 1.txt 与 2.txt 的对应行同排输出,如是,给一个更简捷的版本如下...

  1. @echo off &(for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  2.    set "v=" &set/p "v=" &setlocal enabledelayedexpansion &echo,%%b        !v!
  3.    endlocal) )<2.txt >3.txt
  4. pause&exit/b
复制代码
 楼主| 发表于 2025-9-7 10:26:52 | 显示全部楼层
回复 10# aloha20200628


   太感谢了,我消化吸收一下
发表于 2025-9-10 13:54:32 | 显示全部楼层
回复 9# delab-1
如果只是以行号来连接,用paste( http://bcn.bathome.net/tool/2.1/paste.exe )比较方便:

  1. paste 1.txt 2.txt>3.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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