Board logo

标题: [文本处理] [已解决]批处理倒序显示文本内容时无法显示感叹号? [打印本页]

作者: xushaolong2009    时间: 2009-4-11 23:34     标题: [已解决]批处理倒序显示文本内容时无法显示感叹号?

看了个教程,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 编辑 ]
作者: 随风    时间: 2009-4-11 23:43

搜索论坛的 “变量延迟” 你会有所收获。
在论坛潜水、发帖、效果应该不亚于你买的书。
作者: Batcher    时间: 2009-4-11 23:45

参考:处理特殊字符的几种方法
http://bbs.bathome.net/thread-1224-1-3.html
作者: xushaolong2009    时间: 2009-4-12 00:04     标题: 反思

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

[ 本帖最后由 xushaolong2009 于 2009-4-12 00:06 编辑 ]
作者: pusofalse    时间: 2009-4-12 00:21

可以考虑不用变量延迟,避开设置变量方法,取得总行数之后再用skip就行了
作者: zqz0012005    时间: 2009-4-12 00:31

最大限度原样输出含特殊字符的指定行内容
http://bbs.verybat.org/viewthread.php?tid=13109&fromuid=37
作者: xushaolong2009    时间: 2009-4-12 09:40     标题: 后续

看了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.    
复制代码
至于如何倒序显示出来,以我现在的水平还不能改出来,等以后水平提高了,就贴出来,就设置已解决吧。 也谢谢楼上的热情帮助!!!!!!
作者: zqz0012005    时间: 2009-4-12 11:33

  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. )
复制代码

作者: Batcher    时间: 2009-4-12 12:17

  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楼。
作者: zqz0012005    时间: 2009-4-12 12:22

sort排序是比较首字符。10会排在2前面。
作者: Batcher    时间: 2009-4-12 12:29     标题: 回复 11楼 的帖子

请测试,10楼代码工作正常。
能否给个反例?
作者: zqz0012005    时间: 2009-4-12 12:32     标题: 回复 12楼 的帖子

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

[ 本帖最后由 zqz0012005 于 2009-4-12 12:34 编辑 ]
作者: Batcher    时间: 2009-6-14 14:09

  1. sed '1!G;h;$!d' a.txt
复制代码
第三方命令行工具 sed.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
作者: Batcher    时间: 2009-6-14 14:18

  1. tac a.txt
复制代码
第三方命令行工具 tac.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: Batcher    时间: 2009-6-14 14:27

  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




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