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

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

看了个教程,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 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. tac a.txt
复制代码
第三方命令行工具 tac.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. sed '1!G;h;$!d' a.txt
复制代码
第三方命令行工具 sed.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12楼 的帖子

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

[ 本帖最后由 zqz0012005 于 2009-4-12 12:34 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 11楼 的帖子

请测试,10楼代码工作正常。
能否给个反例?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

sort排序是比较首字符。10会排在2前面。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

  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楼。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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. )
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

后续

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

TOP

最大限度原样输出含特殊字符的指定行内容
http://bbs.verybat.org/viewthread.php?tid=13109&fromuid=37
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

可以考虑不用变量延迟,避开设置变量方法,取得总行数之后再用skip就行了
心绪平和,眼藏静谧。

TOP

反思

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

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

评分人数

    • nanhui: 菜鸟一起加油:)PB + 1

TOP

参考:处理特殊字符的几种方法
http://bbs.bathome.net/thread-1224-1-3.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

搜索论坛的 “变量延迟” 你会有所收获。
在论坛潜水、发帖、效果应该不亚于你买的书。
技术问题请到论坛发帖求助!

TOP

返回列表