标题: [文本处理] [已解决]批处理倒序显示文本内容时无法显示感叹号? [打印本页]
作者: xushaolong2009 时间: 2009-4-11 23:34 标题: [已解决]批处理倒序显示文本内容时无法显示感叹号?
看了个教程,RT- @echo off& setlocal enabledelayedexpansion
- for /f "delims=* " %%1 in (moon.txt)do (set /a wind+=1
- set snow!wind!=%%1)
- for /l %%1 in (!wind! -1 1)do echo !snow%%1!
- pause
-
复制代码
于是建了文本里内容为- 111111
- 2222
- 2 22
- 258
- eee !!!!!!!!!!!
-
复制代码
运行 后发现绝大部分显示出来了,就是那几个在中文状态下的感叹号!显示不出来的,而在英文状态下的感叹号!则可以显示。
请问,如何才能全部显示
[ 本帖最后由 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大大的帖子,方知天地之大啊,现在就把代码贴出来,但不是倒序的,而是原样显示文本的内容(盗用???狡辩)。- @echo off
- cd.>output.txt
- for /f "delims=" %%i in ('findstr /n .* test.txt') do (
- set "var=%%i"
- setlocal enabledelayedexpansion
- set var=!var:*:=!
- (echo.!var!)>>output.txt
- endlocal
- )
- start output.txt
-
复制代码
至于如何倒序显示出来,以我现在的水平还不能改出来,等以后水平提高了,就贴出来,就设置已解决吧。 也谢谢楼上的热情帮助!!!!!!
作者: zqz0012005 时间: 2009-4-12 11:33
- @echo off
- for /f "delims=" %%a in ('find /c /v "" ^<test.txt') do set /a lines=%%a
- rem 为提高效率使用了临时文件(本来可以不用)
- (echo.&findstr /n .* test.txt)>test.tmp
- (for /l %%a in (%lines% -1 1) do call :getLine %%a)>output.txt
- del test.tmp&start output.txt&exit/b
-
- :getLine
- for /f "skip=%~1 delims=" %%a in (test.tmp) do (
- set "var=%%a"
- setlocal enabledelayedexpansion
- set var=!var:*:=!
- echo.!var!
- endlocal
- goto :eof
- )
复制代码
作者: Batcher 时间: 2009-4-12 12:17
- @echo off
- for /f "tokens=1* delims=:" %%i in ('findstr/n ".*" a.txt^|sort/r') do (
- echo.%%j
- )
- 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
复制代码
第三方命令行工具 sed.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
作者: Batcher 时间: 2009-6-14 14:18
复制代码
第三方命令行工具 tac.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: Batcher 时间: 2009-6-14 14:27
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |