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

【练习-019】批处理顺序排列文本内容

[复制链接]
发表于 2008-9-2 20:10:36 | 显示全部楼层
原帖由 pusofalse 于 2008-9-1 21:23 发表
这题果真难倒了新手吗,期待新手解答出此题。以下,本人的解,期待更加简洁的解。@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
     set "var=%%a"
     if "!var:~1,1!" le ...

如就本题而言,这应该是最简洁的方案了,但如果要通用可能还是要用到set进行排序。
发表于 2008-9-3 15:05:13 | 显示全部楼层
原帖由 batman 于 2008-9-2 20:10 发表

如就本题而言,这应该是最简洁的方案了,但如果要通用可能还是要用到set进行排序。


哦。。。那么文本的格式稍微变一下。

保持原题不变呢。

只是少了行距,和多了混乱的格式而已。

  1. A111
  2. Assure
  3. A12
  4. Cons tant
  5. Smail
  6. A012
  7. Exa
  8. Explosive
  9. Weird
  10. A12345
  11. Admission
  12. A077
  13. Chant
  14. Reli gious
  15. Praise
  16. Rhyming
  17. 32987
  18. Parsley
  19. A034
  20. Faith
  21. Zealous
  22. Absorb
  23. 24980
  24. Principle
复制代码
 楼主| 发表于 2008-9-3 15:15:09 | 显示全部楼层

回复 17楼 的帖子

还是一样的解法吧,只不过要麻烦了。先找出哪些是序号,在序号前补位。
不知还有什么方法。
发表于 2008-9-3 15:28:51 | 显示全部楼层
原帖由 pusofalse 于 2008-9-3 15:15 发表
还是一样的解法吧,只不过要麻烦了。先找出哪些是序号,在序号前补位。
不知还有什么方法。


只是看到你解决问题的方案比较儿戏。
不过也够简洁。

所以故意难为你一下。
发表于 2009-5-14 23:37:57 | 显示全部楼层
用了N多的FOR:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set str=%%i
  4.     if "!str:~0,1!"=="A" (
  5.         set var=!str:~-3!
  6.         if !var! gtr 0 if !var! lss 999 set /a n+=1
  7. )
  8. call,set ".!n!=%%.!n!%%"%%i" "
  9. )
  10. for /f "tokens=2 delims==" %%i in ('set .') do (
  11.     for /f "tokens=1" %%a in ("%%i") do (
  12.         set hh=%%a&set num=!hh:~2,3!&set _!num!=%%i
  13. ))
  14. for /f "tokens=2 delims==" %%i in ('set _') do (
  15.     for %%b in (%%i) do echo %%~b
  16.     echo\
  17. )
  18. pause
复制代码

[ 本帖最后由 keen 于 2009-5-15 00:01 编辑 ]
发表于 2011-1-1 19:59:29 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "usebackq" %%i in (`findstr "^A[0-9]*$" a.txt^|sort`) do (set /a num+=1&set "_!num!=%%i")
  3. for /l %%a in (1 1 %num%) do (
  4.         call set "var=%%_%%a%%"
  5.         for /f "delims=" %%j in (a.txt) do (
  6.                 if "%%j"=="!var!" (set flag=yes&set /a n=0) else (
  7.                 echo %%j|findstr "^A[0-9]*$">nul&&(set flag=&set /a n+=1&(if !n! equ 1 echo.))
  8.                 )
  9.                 if defined flag echo %%j               
  10.         )
  11. )
复制代码

[ 本帖最后由 weichenxiehou 于 2011-1-1 20:02 编辑 ]
发表于 2021-9-23 16:09:39 | 显示全部楼层
本帖最后由 lengmoke 于 2021-9-23 17:06 编辑

  1. @echo off & setlocal EnableDelayedExpansion
  2. md temp
  3. for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do (
  4.     if not "%%j"=="" ( set "str=%%j" & set "strs=!strs! !str: =+!" ) else ( md "temp\!strs!" & set "strs=" )
  5. )
  6. md "temp\!strs!"
  7. for /f "delims=" %%i in (' dir /b/on %cd%\temp ') do (
  8.     for %%j in (%%i) do ( set "str=%%j" & echo !str:+= !)
  9.     echo.
  10. )
  11. rd /q/s temp
复制代码
发表于 2021-9-24 12:14:25 | 显示全部楼层
试了试,发现还是和前辈们思路基本一致,就不好意思发出来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 02:04 , Processed in 0.017408 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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