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

[文本处理] BAT如何把txt内容按字符长短排列?

[复制链接]
发表于 2013-2-17 19:06:05 | 显示全部楼层 |阅读模式
a.txt  内容  
会地地村士大夫肝要热管
大师傅脸
村枯枯
夺有十二分十二分


求一BAT 如何把a.txt内容按字符长短排列成
村枯枯
大师傅脸
夺有十二分十二分
会地地村士大夫肝要热管
发表于 2013-2-18 00:48:57 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /l %%a in (1 1 100) do (
  4.    set "a=!a!."
  5.    findstr /x "!a!" a.txt
  6. ))>b.txt
  7. pause
复制代码
这个很慢,效率高的要比较复杂
发表于 2013-2-19 21:00:55 | 显示全部楼层
排序用BAT实现比较麻烦,给一个讨巧的办法,不过仅限于楼主所提供的a.txt
  1. @ECHO OFF
  2. Setlocal enableDelayedExpansion
  3. for /f "tokens=*" %%i in (a.txt) do (
  4.         set str=%%i123456789
  5.         set str=!str:~11,1!
  6.         set a!str!=%%i
  7. )

  8. for /l %%j in (10,-1,1) do (
  9.         set str1=%%j
  10.         call set str2=%%a!str1!%%
  11.         if not "!str2!"=="" echo !str2!>>b.txt
  12. )
复制代码
发表于 2013-2-19 21:17:34 | 显示全部楼层
这是VBS做的排序
  1. option explicit
  2. dim fso, class1, class2, class3, str, count
  3. set fso = createobject("scripting.filesystemobject")
  4. set class1 = fso.opentextfile("a.txt")
  5. set class2 = createobject("scripting.dictionary")
  6. set class3 = fso.createtextfile("b.txt")
  7. do until class1.atendofstream
  8.         str = class1.readline
  9.         class2(len(str)) = str
  10. loop

  11. do while count < class2.count
  12.         if not class2(count) = "" then class3.writeline class2(count)
  13.         count = count + 1
  14. loop
复制代码
发表于 2013-2-19 22:35:41 | 显示全部楼层
其实可以用第三方的话,linux里的sort就是按长度排序的,到下面这个链接里下载
http://www.bathome.net/thread-1114-1-1.html
放在同文件夹下运行这个
@sort a.txt>b.txt
发表于 2013-2-21 16:42:04 | 显示全部楼层
我也来个vbs
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt")
  3. Do Until File.AtEndOfStream
  4.    Line = File.ReadLine
  5.    Str = Str & Right("000"&Len(Line),4) & " " & Line & vbCrLf
  6. Loop
  7. FSO.CreateTextFile("$",True).Write Str
  8. Set s=CreateObject("Wscript.Shell")
  9. s.Run "cmd /c(for /f ""tokens=1*"" %a in ('sort $')do @echo,%b)>b.txt&del $",0
  10. MsgBox "OK"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:22 , Processed in 0.017217 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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