找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31363|回复: 11

[文本处理] 【已解决】BAT :如何按照对应关系批量置换数据

[复制链接]
发表于 2015-3-7 22:55:35 | 显示全部楼层 |阅读模式
本帖最后由 思想之翼 于 2015-3-9 00:22 编辑

D:/数据1/内有若干txt文本,每个文本内有若干行数据,格式为:
91457
12345
欲按如下对应关系,对所有文本内的数据进行批量置换:
0置换为0369
3置换为0369
6置换为0369
9置换为0369
1置换为147
4置换为147
7置换为147
2置换为258
5置换为258
8置换为258
上例数据:
91457
12345
置换后为:
0369/147/147/258/147
147/258/0369/147/258
将置换后的数据写入D:/数据2/  原文本名称不变。
这样的代码如何写?恳望得到帮助。
发表于 2015-3-8 00:49:07 | 显示全部楼层
本帖最后由 CrLf 于 2015-3-8 01:40 编辑
  1. @echo off
  2. dir /b "D:/数据1/*.txt"|mshta "%~f0"
  3. pause & exit /b

  4. <script src=http://www.bathome.net/lib/diy/WSH.js></script>
  5. <script src=http://www.bathome.net/lib/diy/hide.js></script>
  6. <script src=http://www.bathome.net/lib/diy/Function.js></script>

  7. <script>
  8. var list = {
  9.         0:"0369", 3:"0369", 6:"0369", 9:"0369", 1:"147",
  10.         4:"147", 7:"147", 2:"258", 5:"258", 8:"258"
  11. }

  12. var dir = WScript.StdIn.ReadAll().split(/\r?\n/)

  13. for(var i in dir){
  14.         var text = type(dir[i])
  15.                 .replace(/./g,function(c){
  16.                         return c in list ? list[c] : c
  17.                 })
  18.         createfile(dir[i],1).Write(text)
  19. }
  20. </script>
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

 楼主| 发表于 2015-3-8 01:03:51 | 显示全部楼层
回复 2# CrLf

感谢帮助。
经过测试,出错:   无效开关-“数据1”

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 感谢指正

查看全部评分

发表于 2015-3-8 01:41:01 | 显示全部楼层
给 D:/数据1/*.txt 加个引号就好了,楼主学习下,以后这种简单的问题可以自己改
 楼主| 发表于 2015-3-8 02:04:55 | 显示全部楼层
回复 4# CrLf

加了引号,还是错了:
发表于 2015-3-8 03:03:44 | 显示全部楼层
那说明你的 D:/数据1/ 里没 txt 文件,这不是逗我吗...
 楼主| 发表于 2015-3-8 03:29:31 | 显示全部楼层
回复 6# CrLf

放上测试附件。
发表于 2015-3-8 10:40:13 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. pushd d:\&md "数据2"
  4. for %%a in ("数据1\*.txt") do (
  5.     (for /f %%b in ('type "%%a"') do (
  6.         set s=%%b
  7.         set s=!s:3=0!&set s=!s:6=0!&set s=!s:9=0!
  8.         set s=!s:4=1!&set s=!s:7=1!
  9.         set s=!s:5=2!&set s=!s:8=2!
  10.         set s=!s:0=0369/!&set s=!s:1=147/!&set s=!s:2=258/!
  11.         echo,!s:~,-1!
  12.     ))>"数据2\%%~nxa"
  13. )
  14. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
CrLf + 1 抓住规律
思想之翼 + 1 感谢

查看全部评分

发表于 2015-3-8 11:06:40 | 显示全部楼层

  1. @echo off&set/a a=-1
  2. for %%i in (D:\数据1\*.txt) do (
  3.     (for /f "usebackq delims=" %%a in ("%%i") do (
  4.         for %%b in (%%a) do (
  5.             setlocal enabledelayedexpansion
  6.             set n=%%b&call :split
  7.             echo,!v:~,-1!&endlocal
  8.         )
  9.     )) >%temp%\$
  10.     move %temp%\$ "%%i"
  11. )
  12. pause&exit
  13.         
  14.         
  15.         
  16. :split
  17. if not "!n!"=="" (
  18.     for /l %%a in (0 1 9) do (
  19.         if "%%a"=="!n:~,1!" (
  20.             for %%b in (0369 147 258 0369 147 258 0369 147 258 0369) do (
  21.                 set/a a+=1
  22.                 if !a! equ %%a set "v=!v!%%b/"
  23.             )
  24.         )
  25.     )
  26.     set n=!n:~1!&set/a a=-1&goto :split
  27. )
  28. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2015-3-8 13:20:48 | 显示全部楼层
本帖最后由 慕夜蓝化 于 2015-3-8 16:03 编辑

  1. @echo off
  2. call :start 147 258 0369 147 258 0369 147 258 0369
  3. pause&exit
  4. :start
  5. for %%i in (d:\数据\*.txt) do (
  6. (for /f "usebackq delims=" %%j in ("%%i") do (
  7.     for %%a in (%%j) do (
  8.         setlocal enabledelayedexpansion
  9.         set u=%%a
  10.         set n=%%afedcba9876543210
  11.         set/a len=0x!n:~16,1!
  12.         for /l %%b in (0 1 !len!) do (
  13.             if not "!u:~%%b,1!"=="0" (
  14.                 set c=!u:~%%b,1!
  15.                 call set v=!v!%%%!c!/
  16.             ) else (
  17.                 set v=!v!0369/
  18.             )
  19.         )
  20.     echo,!v:~,-1!&endlocal   
  21.     )
  22. )) >d:\数据2\%%~nxi
  23. )
  24. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2015-3-9 01:50:56 | 显示全部楼层
回复 10# 慕夜蓝化


    可以借鉴下 8 楼思路,比较直接干脆,解决得很漂亮
发表于 2015-3-9 08:26:10 | 显示全部楼层
回复 11# CrLf


    嗯,也写了一下,用的替换的思路。

  1. @echo off
  2. set/a y=147,z=258&set x=0369
  3. for /l %%a in (0 3 9) do set %%a=x
  4. for %%a in (1 4 7) do set %%a=y
  5. for %%a in (2 5 8) do set %%a=z
  6. for /f "delims=" %%i in (a.txt) do (
  7.     for %%j in (%%i) do (
  8.         setlocal enabledelayedexpansion
  9.         set n=%%j
  10.         for /l %%a in (0 1 9) do set v=!%%a!&call set n=!n:%%a=%%v%%!
  11.         for %%a in (x y z) do set u=!%%a!&call set n=!n:%%a=%%u%%/!
  12.         set/p=!n:~,-1!  <nul&endlocal
  13.     )
  14.     echo,
  15. )
  16. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-23 00:47

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表