标题: [文本处理] 批处理怎样把txt合并后,行号重新排序? [打印本页]
作者: karmane 时间: 2022-3-21 22:57 标题: 批处理怎样把txt合并后,行号重新排序?
现在通过copy命令实现了txt文件的合并,但是行号怎么实现从1开始的顺序排序呢???
作者: Batcher 时间: 2022-3-22 11:55
回复 1# karmane
请举例说明一下你的需求,比如合并之前什么样,合并之后又是什么样?
如需上传截图,请用图床:
http://bbs.bathome.net/thread-60985-1-1.html
如需上传附件,请用阿里云盘或百度网盘。
作者: karmane 时间: 2022-3-24 23:31
回复 2# Batcher
文本的格式是一样的(逗号分割文件),有时候需要把多个文件合并成一个,但是序号要从1开始的顺序递增。
如下图:
作者: karmane 时间: 2022-3-24 23:32
作者: karmane 时间: 2022-3-24 23:36
奇怪了,怎么看不到截图呢?
作者: Batcher 时间: 2022-3-25 08:42
回复 3# karmane
请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set "n=0"
- (for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
- for /f "tokens=1* delims=," %%b in ('type "%%a"') do (
- set /a n+=1
- echo !n!,%%c
- )
- ))>"合并.tmp"
- ren "合并.tmp" "合并.txt"
复制代码
作者: qinxg 时间: 2022-3-25 08:42
合并后
sort 合并.txt >1.txt
作者: qixiaobin0715 时间: 2022-3-25 08:56
- @echo off
- (for /f "tokens=1,2* delims=,:" %%i in ('findstr /n .* 合并后的文本.txt') do echo,%%i,%%k)>行号重排.txt
- del 合并后的文本.txt
复制代码
作者: Batcher 时间: 2022-3-25 09:00
回复 7# qinxg
你可能没有看清楚需求吧,他那些第一列的数字是文本的一部分,所以是需要修改的
作者: karmane 时间: 2022-3-25 22:18
回复 6# Batcher
亲测可以,谢谢!如果早知道有这个论坛,那该多好啊。。。
作者: karmane 时间: 2022-3-25 22:23
回复 7# qinxg
虽然没有实现排序的需求,但也让我学习了“sort”命令,感谢!
作者: karmane 时间: 2022-3-25 22:26
回复 8# qixiaobin0715
简单的一行命令就能实现,牛,我还得好好消化一下呢,,感谢!
作者: qixiaobin0715 时间: 2022-3-26 08:34
实际上标准姿势或者规范写法应当是:- @echo off
- (
- for /f "tokens=1,2* delims=,:" %%i in ('findstr /n .* 合并后的文本.txt') do (
- echo,%%i,%%k
- )
- )>行号重排.txt
- del 合并后的文本.txt
复制代码
这样好理解一些。
作者: karmane 时间: 2022-3-26 22:18
回复 13# qixiaobin0715
学习学习
作者: karmane 时间: 2022-4-19 22:33
回复 8# qixiaobin0715
再请教一下
定义了一个路径的变量,想实现输出路径的灵活配置,结果报错了,求解。。。
@echo off
set Path="D:\合并\输出"
(for /f "tokens=1,2* delims=,:" %%i in ('findstr /n .* %Path%\合并后的文本.txt') do echo,%%i,%%k)>%Path%\行号重排.txt
del %Path%\合并后的文本.txt
作者: Batcher 时间: 2022-4-20 09:05
回复 15# karmane
把所有的Path替换成myPath
作者: qixiaobin0715 时间: 2022-4-20 09:10
回复 15# karmane
%path%属于系统变量,尽量不要用系统变量名设置自定义变量。
你可以运行echo,%path%试试即知。
你这种情况用cd跳转到要处理的目录即可:- cd /d "D:\合并\输出"
- (for /f "tokens=1,2* delims=,:" %%i in ('findstr /n .* 合并后的文本.txt') do echo,%%i,%%k)>行号重排.txt
- del 合并后的文本.txt
复制代码
作者: qixiaobin0715 时间: 2022-4-20 10:41
本帖最后由 qixiaobin0715 于 2022-4-20 13:06 编辑
也可以像在顶楼所说,不用先合并后处理合并后的文本,而是直接合并:- @echo off
- cd /d "D:\合并\输出"
- (for /f "tokens=1,2* delims=:," %%a in ('find /v "" *.txt^|findstr /vr "\.TXT$ ^$"^|findstr /n .*') do echo,%%a,%%c)>合并.txt
- pause
复制代码
作者: karmane 时间: 2022-4-20 22:08
回复 16# Batcher
原来是变量名和关键字冲突了,搞半天,感谢,感谢
作者: karmane 时间: 2022-4-20 22:10
回复 17# qixiaobin0715
谢谢!又学到东西了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |