Board logo

标题: [文本处理] 【已解决】BAT:如何批量整理txt文本数据 [打印本页]

作者: 思想之翼    时间: 2015-1-28 00:25     标题: 【已解决】BAT:如何批量整理txt文本数据

本帖最后由 思想之翼 于 2015-1-28 11:21 编辑

D:/数据1/内有若干txt文本,每个文本内的数据格式如下:
02,24,45,56,67,13,38,89,04,05,06,07,25,26,27,46,47,57,18,19,39
欲批量整理文本内的数据,整理后的数据格式为:
2=0 2
2=2 4
2=4 5
2=5 6
2=6 7
2=1 3
2=3 8
2=8 9
2=0 4
2=0 5
2=0 6
2=0 7
2=2 5
2=2 6
2=2 7
2=4 6
2=4 7
2=5 7
2=1 8
2=1 9
2=3 9
整理后的文本保留原名称,并写入D:/数据2/内
这样的代码如何写?恳望得到帮助。
作者: 再世情緣    时间: 2015-1-28 07:04

  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. mkdir "D:\数据2" >nul 2>nul
  3. cd /d "D:\数据1\"
  4. for %%a in (*.txt) do (
  5.   set "nm=%%~nxa"
  6.   set /p code=<"%%~fa"
  7.   call :next
  8. )
  9. pause.
  10. call exit
  11. :next
  12. cd.>"D:\数据2\!nm!"
  13. set /a "i=0"
  14. :loop
  15. set "ab=!code:~%i%,2!"
  16. if "!ab!" EQU "" (goto :eof)
  17. set "a=!ab:~0,1!" &set "b=!ab:~1,1!"
  18. (echo.2=!a! !b!)>>"D:\数据2\!nm!"
  19. set /a "i+=3"
  20. goto :loop
复制代码

作者: 慕夜蓝化    时间: 2015-1-28 08:48

  1. @echo off&setlocal enabledelayedexpansion
  2. pushd d:\数据1\
  3. for /f "delims=" %%i in ('dir /b/a-d d:\数据1\*txt') do (
  4.     (for /f "usebackq delims=" %%a in ("%%~fsi") do (
  5.         for %%b in (%%a) do (
  6.             set "str=%%b"&echo,2=!str:~,1! !str:~-1!
  7.         )
  8.     )) >d:\数据2\%%~nxi
  9. )
  10. pause
复制代码
我这里测试是通过的,你试一下。
作者: 思想之翼    时间: 2015-1-28 11:16

本帖最后由 思想之翼 于 2015-1-28 11:20 编辑

谢谢您们的帮助。测试通过。
作者: c755731262    时间: 2015-1-28 11:51

回复 3# 慕夜蓝化


    帮忙看看我的哪里出错了,结果不对
  1. @echo off
  2. color f0&setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a:-d d:\数据1\*txt') do (
  4. (for /f "delims=" %%b in (%%~fsa) do (
  5.      set n=%%b,p
  6.      echo 2=!n:~0,1! !n:~1,1!
  7.      :loop
  8.      echo 2=!n:~0,1! !n:~1,1!
  9.      set n=!n:~3!
  10.      if not "!n!" == "p" goto :loop
  11. )
  12. ) >>d:\数据2\%%~nxa
  13. )
  14. pause
复制代码

作者: 慕夜蓝化    时间: 2015-1-28 11:59

本帖最后由 慕夜蓝化 于 2015-1-28 12:00 编辑

回复 5# c755731262
  1. for /f "delims=" %%a in ('dir /b /a:-d d:\数据1\*txt') do (
  2. (for /f "delims=" %%b in (%%~fsa) do (
复制代码
之后的一大串都有问题,首先你要提取元素才能这么干
  1. for %%i in (%%b) do (
复制代码
把这句加上。然后再提取字符;
一定要把基础知识打扎实了再来实习。多看他们的代码。
不懂的就测试,测试完毕还不懂,再来问。
作者: c755731262    时间: 2015-1-28 18:37

回复 6# 慕夜蓝化


    我想问的是循环里面第二个for语句执行的代码,哪里出错了,也就是loop所在的()那一块
作者: 慕夜蓝化    时间: 2015-1-28 18:50

回复 7# c755731262

for语句中怎么可以有这种循环呢,这段代码我没看明白你要表达的什么意思;:loop在这里代表的是一个标签,很少有人会在for语句中使用,至少到目前为止还没有见到,你这样写是一个死循环;永远都跳不出去。
也就是说,都是错的,代码很乱。你需要重新构建一个思路。
作者: yiwuyun    时间: 2015-1-28 20:55

好像没有错,不过它太严格依赖文本了。改成这样更好
     set n=%%b
     echo 2=!n:~0,1! !n:~1,1!
     :loop
     echo 2=!n:~0,1! !n:~1,1!
     set n=!n:~3!
     if not "!n!" == "" goto :loop




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