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

[文本处理] [已解决]批处理倒序显示文本内容时无法显示感叹号?

[复制链接]
发表于 2009-4-11 23:34:20 | 显示全部楼层 |阅读模式
看了个教程,RT
  1.   @echo off& setlocal enabledelayedexpansion
  2.    for /f  "delims=* " %%1 in (moon.txt)do (set /a wind+=1
  3.    set snow!wind!=%%1)
  4.    for /l %%1 in (!wind! -1 1)do echo !snow%%1!
  5.    pause
  6.   
复制代码
于是建了文本里内容为
  1.   111111
  2.    2222
  3.    2 22
  4.   258
  5.   eee !!!!!!!!!!!
  6.   
复制代码
运行 后发现绝大部分显示出来了,就是那几个在中文状态下的感叹号!显示不出来的,而在英文状态下的感叹号!则可以显示。
请问,如何才能全部显示

[ 本帖最后由 xushaolong2009 于 2009-4-12 09:41 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-4-11 23:43:33 | 显示全部楼层
搜索论坛的 “变量延迟” 你会有所收获。
在论坛潜水、发帖、效果应该不亚于你买的书。
发表于 2009-4-11 23:45:04 | 显示全部楼层
参考:处理特殊字符的几种方法
http://bbs.bathome.net/thread-1224-1-3.html
 楼主| 发表于 2009-4-12 00:04:40 | 显示全部楼层

反思

谢谢楼上的帮助,做为菜鸟的我会努力的。
  ps 4楼的好像那个!!!还是不能显示出来。 刚刚在提问时把!!!!!!写反了,应该是不能显示!!!(中文状态下),而能显示!!!!(英文状态下),现已改回。还是谢谢了!!!

[ 本帖最后由 xushaolong2009 于 2009-4-12 00:06 编辑 ]

评分

参与人数 1PB +1 收起 理由
nanhui + 1 菜鸟一起加油:)

查看全部评分

发表于 2009-4-12 00:21:44 | 显示全部楼层
可以考虑不用变量延迟,避开设置变量方法,取得总行数之后再用skip就行了
发表于 2009-4-12 00:31:30 | 显示全部楼层
最大限度原样输出含特殊字符的指定行内容
http://bbs.verybat.org/viewthread.php?tid=13109&fromuid=37
 楼主| 发表于 2009-4-12 09:40:01 | 显示全部楼层

后续

看了bjsh大大的帖子,方知天地之大啊,现在就把代码贴出来,但不是倒序的,而是原样显示文本的内容(盗用???狡辩)。
  1. @echo off
  2. cd.>output.txt
  3. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  4.         set "var=%%i"
  5.         setlocal enabledelayedexpansion
  6.         set var=!var:*:=!
  7.         (echo.!var!)>>output.txt
  8.         endlocal
  9. )
  10. start output.txt
  11.    
复制代码
至于如何倒序显示出来,以我现在的水平还不能改出来,等以后水平提高了,就贴出来,就设置已解决吧。 也谢谢楼上的热情帮助!!!!!!
发表于 2009-4-12 11:33:40 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%a in ('find /c /v "" ^<test.txt') do set /a lines=%%a
  3. rem 为提高效率使用了临时文件(本来可以不用)
  4. (echo.&findstr /n .* test.txt)>test.tmp
  5. (for /l %%a in (%lines% -1 1) do call :getLine %%a)>output.txt
  6. del test.tmp&start output.txt&exit/b

  7. :getLine
  8. for /f "skip=%~1 delims=" %%a in (test.tmp) do (
  9.     set "var=%%a"
  10.     setlocal enabledelayedexpansion
  11.     set var=!var:*:=!
  12.     echo.!var!
  13.     endlocal
  14.     goto :eof
  15. )
复制代码
发表于 2009-4-12 12:17:08 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1* delims=:" %%i in ('findstr/n ".*" a.txt^|sort/r') do (
  3.   echo.%%j
  4. )
  5. pause
复制代码
对于超过10行的文本,此方法会出错,讲解见11、13楼。
发表于 2009-4-12 12:22:52 | 显示全部楼层
sort排序是比较首字符。10会排在2前面。
发表于 2009-4-12 12:29:01 | 显示全部楼层

回复 11楼 的帖子

请测试,10楼代码工作正常。
能否给个反例?
发表于 2009-4-12 12:32:06 | 显示全部楼层

回复 12楼 的帖子

你的使用的文本行数少于10吧?
试试多于10行的文本。
(for %a in (1 1 10) do @echo %a)>t.txt

[ 本帖最后由 zqz0012005 于 2009-4-12 12:34 编辑 ]
发表于 2009-6-14 14:09:58 | 显示全部楼层
  1. sed '1!G;h;$!d' a.txt
复制代码
第三方命令行工具 sed.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
发表于 2009-6-14 14:18:52 | 显示全部楼层
  1. tac a.txt
复制代码
第三方命令行工具 tac.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
发表于 2009-6-14 14:27:50 | 显示全部楼层
  1. gawk "{a[NR]=$0}END{for(i=NR;i>0;i--)print a[i]}" a.txt
复制代码
第三方命令行工具 gawk.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 18:32 , Processed in 0.041551 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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