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

[文本处理] 批处理如何将txt文本的内容倒序/反转?

[复制链接]
发表于 2010-10-1 21:47:29 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-9-3 20:00 编辑

一个文本文件,如何将最后一行变成第一行,依次类推,比如一个文件有100行,100行变第一行,99行变第二行.......第一行变第100行,第二行变99行,即倒过来按顺序排一下.
发表于 2010-10-1 22:57:29 | 显示全部楼层
  1. gawk "{a[NR]=$0} END{for(j=NR;j>=0;j--)print a[j]}" urfile.txt
复制代码


gawk为第三方软件,本论坛有下载。

[ 本帖最后由 asnahu 于 2010-10-1 23:17 编辑 ]
 楼主| 发表于 2010-10-1 23:15:02 | 显示全部楼层
谢谢,不过没有搜到GAWK,能不能不用第三方软件,用for之类的能不能实现?
发表于 2010-10-1 23:15:11 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t=2147483648
  4. for /f  %%a in (1.txt) do (
  5. set _!t!%%a=%%a
  6. set/a t-=1
  7. )
  8. for /f "tokens=2 delims=="  %%i in ('set _') do (
  9. echo %%i>>tem.txt
  10. )
  11. pause
复制代码
 楼主| 发表于 2010-10-1 23:46:02 | 显示全部楼层
原帖由 edmond 于 2010-10-1 23:15 发表
@echo off
setlocal enabledelayedexpansion
set t=2147483648
for /f  %%a in (1.txt) do (
set _!t!%%a=%%a
set/a t-=1
)
for /f "tokens=2 delims=="  %%i in ('set _') do (
echo %%i>>tem.txt
)
pa ...




实现了,谢谢,不过2147483648是什么意思,改成其它的好像就不对了.
发表于 2010-10-2 00:01:02 | 显示全部楼层
批处理运算能处理的最大数值
如果你的行数超过了2147483648 以上代码就不行了
改小是可以的


意思是你文本里需要处理最多的行数
 楼主| 发表于 2010-10-2 00:05:54 | 显示全部楼层
我只有100行,改成100后,次序就乱了,改回正常了.
发表于 2010-10-2 00:54:42 | 显示全部楼层
变量排序的方法是从左到右从小到大(前面三位),后面的可以作为一个数值排
你输入100后的排序是百位排好后再排十位然后个位这样的
自然就乱了

我记得是这样的
如果高手在的话,最好能够请高手详细说明,以免产生误导

[ 本帖最后由 edmond 于 2010-10-2 01:04 编辑 ]
发表于 2010-10-2 12:29:03 | 显示全部楼层

回复 3楼 的帖子

第三方命令行工具 gawk.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
发表于 2010-10-2 12:48:30 | 显示全部楼层
批处理行倒序输出文件内容
http://bbs.bathome.net/thread-4127-1-1.html
发表于 2010-10-2 12:50:43 | 显示全部楼层

回复 4楼 的帖子

你内容找个包含感叹号的文件试试?
发表于 2010-10-2 15:13:03 | 显示全部楼层
回复11楼batcher,谢谢提醒
确实无法实现感叹号的问题,关于变量延迟还得仔细潜一下啊,下面写了个不用延迟的,就是效率太差了,
现在好像对bat越学越笨拙了......................

  1. @echo off
  2. set "t=-1"
  3. for /f  "tokens=1* delims=:" %%a in ('findstr /n ".*" 1.txt') do (
  4.   set/a t+=1
  5.   if not defined m (set m=%%b)
  6. )
  7. :ss
  8. if %t%==0 (echo %m%&pause)
  9. for /f "skip=%t% tokens=1* delims=:"  %%i in ('findstr /n ".*" 1.txt') do (
  10. echo %%j
  11. set/a t-=1
  12. goto ss
  13. )
复制代码

[ 本帖最后由 edmond 于 2010-10-2 22:53 编辑 ]
发表于 2010-10-2 15:20:41 | 显示全部楼层

回复 12楼 的帖子

Q: 如何用code把代码括起来?
A: http://bbs.bathome.net/thread-404-1-1.html

参考:批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html
发表于 2010-10-2 15:34:49 | 显示全部楼层
来个JS
  1. f = "C:\\test\\1.txt"; //文件路径请用\\
  2. overWrite = 0; //是否替换原文件

  3. fso = new ActiveXObject("Scripting.FileSystemObject");
  4. if(!overWrite) f2=f+'.new.txt'; else f2=f;
  5. s=fso.OpenTextFile(f).ReadAll();
  6. s=s.split('\r\n').reverse().join('\r\n');
  7. fso.OpenTextFile(f2,2,true).Write(s);
复制代码

评分

参与人数 1PB +6 技术 +1 收起 理由
zqz0012005 + 6 + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 05:39 , Processed in 0.033873 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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