Board logo

标题: [文本处理] 批处理文本内容倒序 [打印本页]

作者: fanfande    时间: 2012-4-25 21:47     标题: 批处理文本内容倒序

文件夹内的txt文档
采用批处理的方法使文件夹内的每个txt文档内容都倒序排版

比如之前一个txt文档内容是
123456789
批处理后变成987654321忽略空行

把生成新的txt至newtxt文件夹
作者: lxzzr    时间: 2012-4-25 22:08

字符串倒序还是文本倒序?
作者: apang    时间: 2012-4-25 23:20

本帖最后由 apang 于 2012-4-25 23:41 编辑

如果只是字符串倒序
  1. @echo off
  2. md "newtxt" 2>nul
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.   (for /f "usebackq delims=" %%b in ("%%a") do (
  5.     set "str=%%b"
  6.     setlocal enabledelayedexpansion
  7.     call :lp
  8.     endlocal
  9.   ))>"newtxt\%%a"
  10. )
  11. goto :eof
  12. :lp
  13. if not "!str!"=="" set str1=!str1!!str:~-1!&set "str=!str:~,-1!"&goto lp
  14. echo;!str1!&set str1=
复制代码

作者: apang    时间: 2012-4-25 23:21

本帖最后由 apang 于 2012-4-25 23:42 编辑

字符串、文本倒序
  1. @echo off
  2. md "newtxt" 2>nul
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.   (for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%%a"^|sort /r') do (
  5.     set "str=%%c"
  6.     setlocal enabledelayedexpansion
  7.     call :lp
  8.     endlocal
  9.   ))>"newtxt\%%a"
  10. )
  11. goto :eof
  12. :lp
  13. if not "!str!"=="" set str1=!str1!!str:~-1!&set "str=!str:~,-1!"&goto lp
  14. echo;!str1!&set str1=
复制代码

作者: fanfande    时间: 2012-4-26 08:47

回复 2# lxzzr


    你好版主,就是txt文档里面的所有文字倒序
作者: fanfande    时间: 2012-4-26 08:47

bat太好玩了,只要有规律的就可以实现是吗
作者: fanfande    时间: 2012-4-26 08:52

回复 4# apang


    你好,回复晚了!见谅!
字符串倒序和文本倒序有什么区别啊?我运行下来好像一样的结果!
顺便问下,可以排除文章内的指定字不被倒序批处理吗吗?

比如文章内出现  批处理之家 和 bathome
让批处理之家 和 bathome 跳过不被倒序!

谢谢您
作者: apang    时间: 2012-4-26 11:15

回复 7# fanfande

文本倒序就是,比如你的文本有20行,将最后一行(第20行)放到第一行,第19行放到第二行,以此类推。
#4楼代码有BUG,文本超过10行就不行了。。。
作者: CrLf    时间: 2012-4-26 12:19

  1. @echo off
  2. for /f "delims=" %%a in ('sort /+4096 a.txt') do (
  3.    set line=%%a
  4.    set $=%%a#
  5.    set len=-1
  6.    setlocal enabledelayedexpansion
  7.    for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do (
  8.       if !$:~%%a^,1!. NEQ . set/a len+=%%a&set $=!$:~%%a!
  9.    )
  10.    rem 二分回溯法判断字符串长度,为避免 call 降低效率,将函数内置
  11.    set "str="
  12.    for /l %%a in (!len! -1 0) do set str=!str!!line:~%%a,1!
  13.    echo !str!
  14.    rem 字符串倒序
  15.    endlocal
  16. )
  17. pause
复制代码

作者: fanfande    时间: 2012-4-26 12:25

回复 8# apang


原来是这样啊→文本倒序就是行下面的行滚到上面去是吧
    上尉你好,可以给出完整的代码吗
谢谢
作者: gawk    时间: 2012-4-26 15:35

  1. tac a.txt >b.txt
复制代码

作者: fanfande    时间: 2012-5-8 16:00

回复 11# gawk


    你好,对同一文件夹内的文本进行批处理
作者: gawk    时间: 2012-5-8 18:39

回复 12# fanfande
  1. @echo off
  2. for %%a in (*.txt) do (
  3.     tac %%a >%%~na.log
  4. )
复制代码





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