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

[文本处理] 【已解决】BAT:如何按数字顺序批量整理数据

本帖最后由 思想之翼 于 2015-3-4 09:37 编辑

D:/数据/内有若干txt文本,每个文本数据格式如下:
436        518        752        719        092        078
840        365        259        237        179        126
...
欲将所有文本内的数据从小到大排列,且数字0永远排列在最后,例如:
436改成346
092改成290
如此,上例改成:
346        158        257        179        290        780
480        356        259        237        179        126
...
保持文本中原来数据间的排列队形不变。
整理后的数据覆盖原数据,保持原文本名称不变。

这样的代码如何写?恳望得到帮助。
1

评分人数

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

本帖最后由 apang 于 2015-2-28 23:53 编辑
  1. @set @n=0;/* & echo off
  2. pushd "d:\数据\"
  3. dir /b *.txt | cscript -nologo -e:jscript "%~0"
  4. pause & exit & rem */
  5. fso = new ActiveXObject("Scripting.FileSystemObject");
  6. while (!WScript.StdIn.AtEndOfStream) {
  7.         f = WScript.StdIn.ReadLine();
  8.         objFile = fso.OpenTextFile(f, 1);
  9.         txt = objFile.ReadAll();
  10.         objFile.Close();
  11.         txt = txt.replace(/\d+/g, function(s0) {
  12.                 s = "";
  13.                 for (i=1; i<=10; i++) {
  14.                         j = i % 10 + "";
  15.                         if (s0.indexOf(j)>-1) s += j;
  16.                 }
  17.                 return s
  18.         })
  19.         fso.OpenTextFile(f, 2).Write(txt)
  20. }
复制代码
1

评分人数

TOP

本帖最后由 慕夜蓝化 于 2015-3-1 18:01 编辑
  1. @echo off
  2. for %%i in (d:\数据\*.txt) do (
  3.     (for /f "usebackq delims=" %%a in ("%%i") do (
  4.         for %%b in (%%a) do (
  5.             setlocal enabledelayedexpansion
  6.             set "str=%%b"&call :split
  7.             for /f "delims=@=" %%c in ('set @') do if %%c neq 0 (set n=!n!%%c) else set/a a+=1
  8.             if not defined a (
  9.                 set/p=!n!        <nul
  10.             ) else (
  11.                 for /l %%d in (1 1 !a!) do set n=!n!0<nul
  12.                 set/p=!n!        <nul
  13.             )
  14.             endlocal
  15.         )
  16.         echo,
  17.     )) >%temp%\$
  18.     move /y %temp%\$ "%%i"
  19. )
  20. pause&exit
  21. :split
  22. if not "!str!"=="" set @!str:~,1!=A&set str=!str:~1!&goto :split
  23. goto :eof
复制代码
1

评分人数

踏实一些点.不要着急.你想要的时间都会给你.2

TOP

本帖最后由 pcl_test 于 2015-3-2 14:09 编辑

回复 1# 思想之翼
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "D:\数据\"
  4. for %%a in (*.txt) do (
  5.   for /f "delims=" %%b in ('type "%%a"') do (
  6.     set s=
  7.     for %%c in (%%b) do (
  8.       >$ echo,%%c
  9.       set t=
  10.       for %%d in (1 2 3 4 5 6 7 8 9 0) do (
  11.       findstr "%%d" $ >nul && set "t=!t!%%d"
  12.       )
  13.       del $
  14.     set "s=!s!!t!        "
  15.     )
  16.   >>tmp echo,!s:~0,-8!
  17.   )
  18. move tmp "%%a"
  19. )
  20. pause
复制代码
1

评分人数

TOP

本帖最后由 cobat 于 2015-3-6 23:43 编辑

原来可以这么做.
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('type "a.txt"') do (
  4.     for %%b in (%%a) do (
  5.         set "i=%%b"
  6.         for /l %%c in (1,1,9) do (
  7.             for %%d in ("!i:%%c=" "!") do set "j=!j!%%c"
  8.             set "j=!j:~,-1!"
  9.         )
  10.         set "j=!j!000"
  11.         <nul set /p "o=!j:~,3!        "
  12.         set "j="
  13.     )
  14.     echo,
  15. )
  16. pause
复制代码
1

评分人数

TOP

返回列表