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

没有通过,不知道错在哪里?

TOP

回复 6# CrLf

CrLf 的代码加上生成b.txt文本的命令就可以适用右边文本名发生了变化的情形:
  1. @echo off
  2. :: 加上生成b.txt文本的命令
  3. for /l %%i in (1,1,4) do (
  4. echo law0%%i
  5. cd law0%%i
  6. dir /b /o *.*
  7. cd..
  8. )>>b.txt
  9. :: CrLf 的原代码
  10. call :setvar a.txt
  11. call :setvar b.txt
  12. setlocal enabledelayedexpansion
  13. for /f "tokens=1,2 delims=_" %%a in (a.txt) do echo;!ar_%%a_%%b!>>c.txt
  14. endlocal
  15. pause&exit
  16. :setvar
  17. for /f "delims=" %%a in (%~s1) do (
  18.    for /f "tokens=1,2 delims=_" %%b in ("%%a") do set ar_%%b_%%c=%%a
  19. )
复制代码
上述代码,经过了测试。
谢谢CrLf 的原代码!

TOP

回复 16# pan528
已经修正一下  我知道还有有个目录的问题 你把测试结果看下

TOP

回复 18# terse


    还是没有通过。
我把模拟的目录传上来。
方便的话,请你测试一下。

TOP

本帖最后由 pan528 于 2013-7-19 18:48 编辑

回复 6# CrLf

版主CrLf:能否解释一下你的代码?

我研究了好久,水平太低,没有搞懂。

我把你的代码变了一下形,运行是正常的:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3. for /f "tokens=1,2 delims=_" %%b in ("%%a") do set %%b_%%c=%%a
  4. )
  5. for /f "delims=" %%i in (b.txt) do (
  6. for /f "tokens=1,2 delims=_" %%a in ("%%i") do set %%a_%%b=%%i
  7. )
  8. setlocal enabledelayedexpansion
  9. for /f "tokens=1,2 delims=_" %%x in (a.txt) do (
  10. echo;!%%x_%%y!
  11. )>>c.txt
  12. endlocal
  13. pause&exit
复制代码
变形后我仍没有搞明白:

1、前两小段设置的变量与第三段的关系

2、如果要将代码改为适合:文本名相同,而双位序号不同,用目录中的文本序号替换a.txt文本的双位序号。
如何修改。

请高手指教,先谢了!

TOP

回复 20# pan528
还是不清楚目录是否要变更

TOP

回复 21# terse

谢谢回贴。

测试了一下,这个代码,实际结果等于:

dir 四个目录中的文件 + 数字排序,从效果上看,忽略了a.txt文本的比对。

我希望更新文本达到这样的效果:
以a.txt文本为基础,看看a.txt文本的文件名,比较四个目录中的文件,有什么变化:
1、与a.txt文本的双位序号相同的文件,文件名发生了变化,即修改文件名;
CrLf 的代码加上生成b.txt文本的命令就可以适用右边文本名发生了变化的情形。
2、与a.txt文本的文件名相同,双位序号发生了变化,即修改双位序号;
CrLf 的代码不知能否改成适合这种情况。
3、四个目录有的,而a.txt文本中即没有相同的序号,又没有相同的文件名,不导入a.txt文本。
4、a.txt文本的目录子项,如“一、中央立法”等,不能变动。

因此,希望你能再改一下代码。谢谢。

TOP

本帖最后由 pan528 于 2013-7-19 19:32 编辑
回复  CrLf

CrLf 的代码加上生成b.txt文本的命令就可以适用右边文本名发生了变化的情形:上述代码,经过 ...
pan528 发表于 2013-7-18 21:20



    简化了一下20楼根据 CrLf 改写代码:
  1. @echo off
  2. title 通过比对目录中的文件双位序号更新文本
  3. for /f "delims=" %%a in (a.txt) do (
  4. for /f "tokens=1,2 delims=_" %%b in ("%%a") do set %%b_%%c=%%a
  5. )
  6. for /f "delims=" %%i in ('dir /s /b /on') do (
  7. for /f "tokens=1,2 delims=_" %%a in ("%%~nxi") do set %%a_%%b=%%~nxi
  8. )
  9. setlocal enabledelayedexpansion
  10. for /f "tokens=1,2 delims=_" %%x in (a.txt) do (
  11. echo;!%%x_%%y!
  12. )>>New.txt
  13. endlocal
  14. pause&exit
复制代码
测试通过!

TOP

本帖最后由 terse 于 2013-7-20 00:41 编辑

回复 22# pan528
上面给你代码 并不是你说的  dir 四个目录中的文件 + 数字排序 只是没看到
早这样述说 应该问题变的简单一点
前面以为你把目录有 A文件没的也要更新到A文件
去掉前面的A文件遍历 但效率不知道怎么样
还有遇到序列和文件名都变化 你要依据修改那个呢
  1. @echo off
  2. for /d %%a in (*) do (
  3.     for /f "tokens=1-2* delims=_" %%i in ('dir /b /a-d "%%a"') do (
  4.         set "%%i_%%j=%%k"
  5.         set "_%%k=%%i_%%j"
  6.     )
  7. )
  8. setlocal enabledelayedexpansion
  9. (for /f "tokens=1-2* delims=_" %%i in (a.txt) do (
  10.     if "!%%i_%%j!" == "" (
  11.        if "%%k" neq "" (
  12.           if "!_%%k!" neq "" (
  13.               echo !_%%k!_%%k&set "!_%%k!="
  14.           ) else echo %%i_%%j_%%k
  15.        ) else echo %%i
  16.     ) else echo %%i_%%j_!%%i_%%j!&set "_!%%i_%%j!="
  17. ))>new_a.txt
  18. pause
复制代码
1

评分人数

TOP

回复 24# terse

测试通过!
非常谢谢你不厌其烦的解答!
代码完全符合全部要求。
对初学者来说比较好理解,只有好好学习了!
再次表示感谢!

TOP

回复 24# terse

这个代码的通用性也很好,如果序号只有一位,如:
一、中央立法
1_关于中华人民共和国国都、纪年、国歌、国旗的决议
10_全国人民代表大会常务委员会批准国务院关于华侨捐资兴办学校办法的决议
100_全国人民代表大会常务委员会关于海南省出席第七届全国人民代表大会代表团组成的决定
101_中华人民共和国进出口商品检验法
102_中华人民共和国传染病防治法
103_中华人民共和国行政诉讼法
102742_全国人民代表大会常务委员会关于中国银行业监督管理委员会履行原由中国人民银行履行的监督管理职责的决定
1029721234_中华人民共和国澳门特别行政区第一届XX推选委员会委员守则
二、行政法规
12167_国务院关于发布《中华人民共和国一九八七年国库券条例》的通知
12180_国务院关于违反财政法规处罚的暂行规定
12226_国家土地开发建设基金回收管理试行办法
12310_中共中央办公厅、国务院办公厅关于在国内公务活动中严禁用XX宴请和有关工作餐的规定
122765_全民所有制工业企业承包经营责任制暂行条例(修订)
1253070_中华人民共和国进出口关税条例

将代码相应修改即可通过:
  1. @echo off
  2. for /d %%a in (*) do (
  3.     for /f "tokens=1* delims=_" %%i in ('dir /b /a-d "%%a"') do (
  4.         set "%%i=%%j"
  5.         set "_%%j=%%i"
  6.     )
  7. )
  8. setlocal enabledelayedexpansion
  9. (for /f "tokens=1* delims=_" %%i in (a.txt) do (
  10.     if "!%%i!" == "" (
  11.        if "%%j" neq "" (
  12.           if "!_%%j!" neq "" (
  13.               echo !_%%j!_%%j&set "!_%%j!="
  14.           ) else echo %%i_%%j
  15.        ) else echo %%i
  16.     ) else echo %%i_!%%i!&set "_!%%i!="
  17. ))>new_a.txt
  18. pause
复制代码

TOP

回复 26# pan528


    以后把要求在顶楼一次说清吧,大家都轻松

TOP

返回列表