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

[文件操作] 批处理如何将两个文本中的有用信息合成到一个文本?

文本a.txt的内容:
200806 54980123 pri[100] png[1] type[1]
200806 76698430 pri[600] png[7] type[1]
200806 21377401 pri[400] png[4] type[1]
200806 21307450 pri[800] png[6] type[1]
200806 12370400 pri[900] png[9] type[1]

文本b.txt的内容:
from png[1] chg: result[1008]
from png[7] chg: result[278]
from png[4] chg: result[4]
from png[6] chg: result[56]
from png[9] chg: result[9007]

现在要将a和b中的内容拼接成如下形式:
54980123,pri[100],result[1008]
76698430,pri[600],result[278]
21377401,pri[400],result[4]
21307450,pri[800],result[56]
12370400,pri[900],result[9007]

我试过用for的嵌套,但结果出现了以交叉组合,比如54980123 pri[100]会与每一个result进行组合
之后我试着用变量来控制skip,或是用CALL来调用第二个FOR,可能是我对批处理的一些小细节还没掌握得够好,我始终得不到理想的结果
请各位高人们指点一下了,非常感谢!

方法一、
:
  1. @echo off&set /a n=-1
  2. for /f "tokens=2-3 delims= " %%a in (a.txt) do call :loop "%%a" "%%b"
  3. pause
  4. :loop
  5. set /a n+=1
  6. if %n% equ 0 (set skip=) else (set skip=skip=%n%)
  7. for /f "%skip% tokens=3* delims= " %%i in (b.txt) do echo %~1,%~2,%%j&goto :eof
  8. goto :eof
复制代码
方法二、
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2-3 delims= " %%a in (a.txt) do (
  3.    set /a n+=1
  4.    set .!n!=%%a,%%b
  5. )
  6. for /f "tokens=3* delims= " %%i in (b.txt) do (
  7.    set /a m+=1
  8.    call echo %%.!m!%%,%%j
  9. )
  10. pause
复制代码
技术问题请到论坛发帖求助!

TOP

谢谢

非常感谢随风兄弟

我试过代码了,很成功,不过有点看不懂里面的很多东西,还得麻烦你指点一下

比如set .!n!=%%a,%%b为什么是.!n!
tokens=3* 后面的星号也不明白,我把三改了一下,再去了星号,知道是结果的区别了,但是为什么要用这个星号还不直接用tokens=4呢?

for /f "%skip% tokens=8* delims= " %%i in (2.txt) do echo %~1,%~2,%%j&goto :eof 中
我曾用skip=变量的方式一直报错,用%skip%必须是这种格式才能成功吧?

TOP

.!n! 只是一个变量名,你可以用任意变量名,如 a!n!    b!n!  都可以。
3* 后面的 * 代表第3列后面的所有内容,而3-4    4 则代表第3列后面的一列,可根据需要自己决定。
skip 后面可以直接用变量,但变量的值不能为空或为0 否则报错。
技术问题请到论坛发帖求助!

TOP

返回列表