Board logo

标题: [文本处理] 批处理怎样排序IP地址? [打印本页]

作者: 冷玉公子    时间: 2011-9-7 15:05     标题: 批处理怎样排序IP地址?

例如文本a.txt中的IP地址为:
  1. 192.168.1.45
  2. 192.168.1.65
  3. 192.168.1.2
  4. 192.168.1.106
  5. 192.168.1.38
  6. 192.168.1.26
  7. 192.168.1.89
  8. 192.168.1.76
  9. 192.168.1.235
复制代码
按照顺序排列出来如下
  1. 192.168.1.2
  2. 192.168.1.26
  3. 192.168.1.38
  4. 192.168.1.45
  5. 192.168.1.65
  6. 192.168.1.76
  7. 192.168.1.89
  8. 192.168.1.106
  9. 192.168.1.235
复制代码

作者: dennisle    时间: 2011-9-7 16:21

請至下列網址下載 sort.exe
http://bbs.bathome.net/thread-1114-1-1.html
  1. sort.exe 1.txt >2.txt
复制代码

作者: 冷玉公子    时间: 2011-9-7 16:35

忘记说明了,不能使用第三方程序。
作者: lxzzr    时间: 2011-9-7 16:54

回复 3# 冷玉公子


sort.exe不是系统自带的么?
作者: wc726842270    时间: 2011-9-7 17:10

LZ要求的可不是ASC排序或DESC排序啊,如果是笔误的话,而且十分想用CMD自带的命令的话,那就用SET吧
作者: 冷玉公子    时间: 2011-9-7 17:13

sort.exe 是系统自带命令 但是那个命令没有搞定的
作者: 冷玉公子    时间: 2011-9-7 18:09

发一个方法
作者: 冷玉公子    时间: 2011-9-7 18:11

  1. @Echo Off&Setlocal Enabledelayedexpansion
  2. For /l %%q in (1,1,255) do (
  3. For /f "delims=. tokens=1-4" %%a in (1.txt) do  (
  4. If  %%q==%%d echo %%a.%%b.%%c.%%q
  5. )
  6. )
  7. pause>nul
复制代码

作者: wc726842270    时间: 2011-9-7 18:40

无聊中,来一个
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=4 delims=." %%i in (1.txt) do (
  4.    set a=--%%i
  5.    echo !a:~-3!
  6. )
  7. )>tmp.txt
  8. for /f "tokens=1 delims=-" %%i in ('sort tmp.txt') do echo %%i
  9. pause
复制代码

作者: wc726842270    时间: 2011-9-7 18:44

在排版方面,Discuz!7.2不如以前的,
作者: Batcher    时间: 2011-9-7 18:47

回复 10# wc726842270


具体是排版的哪个方面呢?
作者: wc726842270    时间: 2011-9-7 18:54

本帖最后由 wc726842270 于 2011-9-7 18:55 编辑

回复 11# Batcher


    呵呵,老大不用在意,是我的问题
作者: 冷玉公子    时间: 2011-9-9 07:45

补齐9喽的命令
  1. @Echo off&SetLocal EnableDelayedExpansion
  2. (For /f "tokens=1,2,3,4 delims=." %%a in (1.txt) do (
  3.    set a=--%%d
  4.    echo %%a.%%b.%%c.!a:~-3!
  5. )
  6. )>tmp.txt
  7. For /f "tokens=1,2 delims=-" %%a in ('Sort tmp.txt') do @Echo %%a%%b
  8. pause
复制代码

作者: wc726842270    时间: 2011-9-9 09:16

如果前面是一样的话就“echo 192.168.1.%%i”吧
作者: 冷玉公子    时间: 2011-9-9 10:25

14楼的兄台在开玩笑吧。你的叫输出不叫排序哦
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set /P Var_Filepach=请讲要处理的文件,拖入此框中。
  3. For /f %%a in (%Var_Filepach%) do (
  4. Set /a NumValue+=1
  5. Set "StrLine!NumValue!=%%a"
  6. )
  7. For /l %%z in (1,1,%NumValue%) do (
  8. For /l %%a in (1,1,%NumValue%) do (
  9. For /f "tokens=* delims=." %%b in ("!StrLine%%a!") do Set StrLineNumValueA=%%b
  10. Set "Var_Stepvalue=%%a"
  11. Set /a Var_Stepvalue+=1
  12. If !Var_Stepvalue! GEQ %NumValue% Set Var_Stepvalue=%NumValue%
  13. Echo !Var_Stepvalue! > %Temp%\Temp
  14. For /f %%b in (%Temp%\Temp) do (
  15. For /f "tokens=* delims=." %%b in ("!StrLine%%b!") do Set StrLineNumValueB=%%b
  16. If !StrLineNumValueA! GTR !StrLineNumValueB! (
  17. Set "StrLineT=!StrLine%%a!"
  18. Set "StrLine%%a=!StrLine%%b!"
  19. Set "StrLine%%b=!StrLineT!"
  20. )
  21. )
  22. )
  23. )
  24. For /l %%a in (1,1,%NumValue%) do (
  25. Echo !StrLine%%a!
  26. )
  27. Pause
复制代码

作者: pcl_test    时间: 2016-9-5 18:22

本帖最后由 pcl_test 于 2016-11-10 14:22 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. %1(for /f "tokens=2 delims==" %%a in ('"%~f0" ::^|sort') do echo;%%a)&pause&exit
  3. for /f "tokens=1-4 delims=." %%a in ('type "ip.txt"') do (
  4.     set /a "a=100+%%a,b=100%%b,c=100+%%c,d=100+%%d"
  5.     echo;!a!!b!!c!!d!=%%a.%%b.%%c.%%d
  6. )
复制代码
  1. rem win7及以上系统运行
  2. powershell -c "gc 'ip.txt'|sort {$a=$_.trim().split('.');'{0:d3}{1:d3}{2:d3}{3:d3}' -f (1*$a[0]),(1*$a[1]),(1*$a[2]),(1*$a[3])}"
  3. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2