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

[文本处理] [已解决]BAT脚本如何实现不同TXT文件中的数据移动?

大家好!
      请大家帮忙看一下这个问题:
         附件B.zip中是四个文件:1、2、3、all
         其中1、2、3三个文件中A列内容的总和等于all文件中的A列内容总和,但是可能顺序不太一样, 不过这不是问题。
         对于1、2、3三个文件中所含有的字段都是一样的,但是唯独没有“md”字段,而这个“md”字段却在all中含有。
      问题是:如果用BAT代码或者窗体等形式实现让1、2、3三个文件都能够从all文件中找到自己对应的"md"内容,并把内容保存到自身的工作薄中?

注:在进行条件判断的时候,所用到的条件就是四个文件中A列的内容是相等的。

谢谢大家。
1

评分人数

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

自己再顶一下吧。

TOP

这个.......再来顶一下。

TOP

:'(

TOP

我去, 不是吧,一直没有人关注吗?

TOP

打酱油的路过

TOP

  1. @echo off
  2. pushd "%~dp0"
  3. rem下面两句指定要处理的文件,请根据需要自行修改!
  4. set file1=wellhead_422.txt
  5. set file2=wellhead_all.txt
  6. for /f "tokens=1*" %%a  in (%file1%) do if not "%%a"=="" set %%a=1
  7. (for /f "tokens=1*" %%A in (%file2%) do if defined %%A echo %%A %%B) >"new_%file1%"
  8. echo %file1%处理完成。
  9. pause>nul
复制代码
请把所有相关文件移动到一个目录下!

由于论坛会转换代码中的TAB到空格,楼主可以直接下载附件。
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 7# applba


    不管怎样,先谢谢你,我先测试和学习你的代码,后续报告中……

TOP

本帖最后由 hacker85 于 2012-1-19 21:59 编辑

回复 7# applba


    这段代码是成功的,谢谢你,不过有两个问题想请教:
1、这个默认只能处理一个文件,如果能写一个循环就好了,可以自动处理其他文件了,希望可能改进一下。
2、这里的代码的意图我不是太明白,因为我目前在积极的学习批处理,有些还没有学懂,如果可能,请做一个注释好吗?=========这条取消,我自己解决了。
3、对于第2条,如果实在没有时间的话, 也没有关系。

TOP

回复 9# hacker85

关键代码只有两句for而已;
我都已经为你做好修改工作了,你把  set file1= 修改为其他要处理文件即可。
你要处理的文件很多吗?

TOP

本帖最后由 hacker85 于 2012-1-19 22:59 编辑

回复 10# applba


    恩,两个for我没有读懂。

类似422这样的文件有很多,大概有200多个吧,都是和all有着本帖中叙述的一样的关系。
all文件我只是截取了一部分放上来,正常的文件有14000多行。
这200多个文件的第一列合起来正好是14000多行。在这个活中,200多个文件的第一列的内容都是不同的,没有重复的(当然也希望在设计程序的时候能考虑到某两个或几个文件的第一列会有重复的现象,
或许可以用defined的踢除重复行的写法)。

TOP

本帖最后由 hacker85 于 2012-1-19 23:06 编辑

回复 10# applba


    1、tokens=1*  这个我不懂:我知道tokens=1,*是什么意思,但是没有逗号的是什么意思呢?
    2、第一个for里把%%a设置成1是什么意思?又为什么紧跟着就可以用()了呢?应该是do后面才可以接括号的呀。
    3、>"new_%file1%"这句是在往一个文件里写数据的意思,并把新文件起了一个带有new_字符的名字,但是新文件的第一个数据可以这样,其第二条数据就应该有>>符号了吧?并且不论是
>还是>>,它们的前面都应该有echo呀,可是我看到的echo还在第二个for的括号中,它能影响到这个新文件吗?

注:奇怪的是,你的代码的结果是对的,但是按我的批处理知识来理解却想不明白。

TOP

  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. pushd "%~dp0"
  4. if exist wellhead_all.txt ren wellhead_all.txt wellhead_all.bak
  5. for %%i in ( wellhead_*.txt ) do (
  6.   set file1=%%~i
  7.   echo %%~i 处理中…
  8.   echo.
  9.   for /f "tokens=1*" %%a  in (!file1!) do if not "%%a"=="" set %%a=1
  10. (for /f "tokens=1*" %%A in (wellhead_all.bak) do if defined %%A echo %%A %%B) > new_%%~i
  11.   echo %%~i 处理完成
  12.   echo.
  13. )
  14. if exist wellhead_all.bak ren wellhead_all.bak wellhead_all.txt
  15. pause
复制代码
请自行替换  %%A        %%B之间的空格为TAB。
1

评分人数

    • CrLf: 乐于助人,幸苦了PB + 5

TOP

本帖最后由 applba 于 2012-1-19 23:44 编辑

回复 12# hacker85
1、1*表示,第一列内容返回给第一个For变量,后面所有的内容原封不动作为一列内容返回给第二个For变量。
2、设置为1是使其成为defined状态,只要不是空的,可以是其他任何值~
3、使用括号括起整个For语句,可以把它的全部输出一次性重定向到文件~

TOP

回复 14# applba


    感谢你的回复,在你的回复中我不只看到了白白的代码,还看到了你的诲人不倦的精神,向你学习。

TOP

返回列表