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

原文不是*号,是网站认为是敏感字,用*替换的。

TOP

楼主是否还有种情况 就是 a文件里有b文件里没有的
序列是否只考虑一种

TOP

现在看出点门道了,例如:
1_1029721234_中华人民共和国澳门特别行政区第一届**推选委员会委员守则
这个是law01\目录下的一个文件的文件名?很是好奇带*号的文件是如何建的?

按8楼说法,把a.txt和law0?4个目录下的文件名同时分隔成两部分,只要有一部分不同,则用文件名替换a.txt对应内容?
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

想简化处理可以先排除重复的多余行,再排序(排序代码你已经有了):
  1. @echo off
  2. gawk -F"_" "!a[$1,$2]++" law01\b.txt law02\b.txt law03\b.txt law04\b.txt a.txt
  3. ::排序代码
  4. pause
复制代码
只要在除重时把 a.txt 放在最后,就会只保留 b.txt 的内容

TOP

回复 8# pan528
是的我也知道相信其他人也知道比对后不同的写入a文件
因为2_12167。。。这个有是在一、中央立法 和 二、行政法规 子栏目之间
目录子栏目(一、中央立法....) 与 文件夹(law01...) 是否对应 都是一定数目吗
如若多了一个 2_12168_................. 这个在A文件里是没有的 是要看其所在的文件夹决定吗
还有A文件一般有多大 或大致有多少条目 文件小和大或许处理方式可以不一样

TOP

回复  CrLf
按楼主的意思 估计b.txt里序列 a.txt会没有 也有改变 没有的补进去
我在想问题是B.txt多出的 ...
terse 发表于 2013-7-16 22:42


“一、中央立法”是a.txt文本中的目录子栏目
“law01\ ”是文件夹
b.txt 是更新了的文件夹与a.txt文本对应部分的结果。

按我的思路:
1、提取a.txt文本的序号部分,分别与四个文件夹(law01、law02、law03、law04)的文件序号比对,只要序号相同,就用文件夹中文本的文件名替换a.txt文本的相应部分;
2、提取a.txt文本的序号外的文件名部分,分别与四个文件夹(law01、law02、law03、law04)的序号外的文件名比对,只要序号外的文件名相同,就用文件夹中文本的文件名替换a.txt文本的相应部分;
通过上述二步达到更新a.txt文本的目的。
但试了一下,水平太低,代码不能完成,请高手指点。

TOP

回复 6# CrLf
按楼主的意思 估计b.txt里序列 a.txt会没有 也有改变 没有的补进去
我在想问题是B.txt多出的 添加到A.txt的那段 因为像一、中央立法 和  law01\ 这样的目录(我这里假设是目录)怎么处理
楼主表述不详细 写这样的代码 其实是体力活 尽可能的表述清楚 才使大家都轻松

TOP

如果 b.txt 的索引号 a.txt 都有的话,可以试试这样:
  1. @echo off
  2. call :setvar a.txt
  3. call :setvar b.txt
  4. setlocal enabledelayedexpansion
  5. for /f "tokens=1,2 delims=_" %%a in (a.txt) do echo;!ar_%%a_%%b!
  6. endlocal
  7. pause&exit
  8. :setvar
  9. for /f "delims=" %%a in (%~s1) do (
  10.    for /f "tokens=1,2 delims=_" %%b in ("%%a") do set ar_%%b_%%c=%%a
  11. )
复制代码

TOP

回复  pan528
你是想把第二部分得到的结果 和第一部分对比 如结果第一部分不包含的就加进 或者前面序列一 ...
terse 发表于 2013-7-16 16:03


第一行的理解是符合我的意思的。
但第二部分是目录中与第一部分相对应的文件,不是文本,因此,按我的理解,是要用第一部分的文本与目录(第二部分)中的文本比对,如果有差异就修正。
想不到好办法筛选,请教各位高手了,先谢了!

TOP

回复 3# pan528
你是想把第二部分得到的结果 和第一部分对比 如结果第一部分不包含的就加进 或者前面序列一致而后面内容不同的 就修改第一部分 使之和第二部分一致 是这样吗
但还有一处不明 目录怎么处理的
还有 加进去 怎么加

TOP

回复 2# xxpinqz

怨我没有讲清楚。
第二部分是四个目录下的文件发生了变化后的情况,不是一个文本。
而且四个目录内不止这些文件,还有其他文件。
但文件的左边的双位代码或文件的名称是相同的,即一半的信息是一致的。

这种情况,应该怎样改代码?

TOP

试试看,通用性不强,只能说解题。
  1. @echo off
  2. (for /f "tokens=1,2* delims=_" %%a in (a.txt) do (
  3.     set strb=
  4.     set/p strb=
  5.     setlocal enabledelayedexpansion
  6.     for /f "tokens=1,2* delims=_" %%i in ("!strb!") do (
  7.         endlocal
  8.         if "%%a_%%b"=="%%i_%%j" (
  9.          echo,%%a_%%b_%%k
  10.         ) else (
  11.             echo,%%a
  12.         )
  13.     )
  14. ))<b.txt>更新.txt
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

返回列表