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

[文本处理] 【已解决】BAT:如何将多个类似的代码合而为一

[复制链接]
发表于 2014-9-17 19:12:19 | 显示全部楼层 |阅读模式
本帖最后由 思想之翼 于 2014-9-18 14:51 编辑

欲下述将210个类似的代码合而为一,出现了问题:

@echo off
cd /d "d:\文本\文本1\001\lishi\"
set 最大文件前缀编号=2
(for /l %%a in (0,1,%最大文件前缀编号%) do (
     setlocal enabledelayedexpansion
     for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
          if not defined #_%%b_Min (
                     set/a #_%%b_Max=#_%%b_Min=%%c
                     set "str=!str! %%b"
          ) else (
               if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
          )
     )
     for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
     endlocal
))>d:\文本\文本1\001\a.txt


@echo off
cd /d "d:\文本\文本1\002\lishi\"
set 最大文件前缀编号=2
(for /l %%a in (0,1,%最大文件前缀编号%) do (
     setlocal enabledelayedexpansion
     for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
          if not defined #_%%b_Min (
                     set/a #_%%b_Max=#_%%b_Min=%%c
                     set "str=!str! %%b"
          ) else (
               if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
          )
     )
     for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
     endlocal
))>d:\文本\文本1\002\a.txt

.......

@echo off
cd /d "d:\文本\文本1\210\lishi\"
set 最大文件前缀编号=2
(for /l %%a in (0,1,%最大文件前缀编号%) do (
     setlocal enabledelayedexpansion
     for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
          if not defined #_%%b_Min (
                     set/a #_%%b_Max=#_%%b_Min=%%c
                     set "str=!str! %%b"
          ) else (
               if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
          )
     )
     for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
     endlocal
))>d:\文本\文本1\210\a.txt

以下为210个类似代码合并,出错。如何修改?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%x in (1001,1,1210) do (
  3.     set y=%%x
  4. cd /d "d:\文本\文本1\!y:~1!\lishi"
  5. set 最大文件前缀编号=2
  6. (for /l %%a in (0,1,%最大文件前缀编号%) do (   
  7.      for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
  8.           if not defined #_%%b_Min (
  9.                      set/a #_%%b_Max=#_%%b_Min=%%c
  10.                      set "str=!str! %%b"
  11.           ) else (
  12.                if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
  13.           )
  14.      )
  15.      for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
  16.      endlocal
  17. ))>d:\文本\文本1\!y:~1!\a.txt
  18. )
复制代码
发表于 2014-9-17 20:52:29 | 显示全部楼层
详细描述一下“出错”
发表于 2014-9-17 20:54:53 | 显示全部楼层
第一次循环已经 cd 到子目录里了,后面的循环会找得到文件吗?
还有 %最大文件前缀编号% 应该用变量延迟。

楼主的意思是这样吧:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%x in (1001,1,1210) do (
  3.         set y=%%x
  4.         pushd "d:\文本\文本1\!y:~1!\lishi"

  5.         set 最大文件前缀编号=2
  6.         (for /l %%a in (0,1,!最大文件前缀编号!) do (
  7.                 for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
  8.                         if not defined #_%%b_Min (
  9.                                                 set/a #_%%b_Max=#_%%b_Min=%%c
  10.                                                 set "str=!str! %%b"
  11.                         ) else (
  12.                                 if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
  13.                         )
  14.                 )
  15.                 for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
  16.                 endlocal
  17.         ))>d:\文本\文本1\!y:~1!\a.txt

  18.         popd
  19. )
复制代码
 楼主| 发表于 2014-9-17 23:43:55 | 显示全部楼层
本帖最后由 思想之翼 于 2014-9-17 23:46 编辑

回复 3# CrLf

感谢您的帮助!

合并后的代码经过测试,存在2个问题:

1、d:\文本\文本1\001\lishi\ 内,只统计文本名称是0-???????.txt的数据,名称是1-???????.txt  2-???????.txt 的数据没有统计,结果如下:
0-0=33-33=1-2
0-0=32-32=1-1
0-0=49-49=1-1
1-1=!str!-!str!=!#_!str!_Min!-!#_!str!_Max!
2-2=!str!-!str!=!#_!str!_Min!-!#_!str!_Max!

2、d:\文本\文本1\002\lishi\ ......d:\文本\文本1\210\lishi\  内的数据没有统计。
发表于 2014-9-18 09:41:26 | 显示全部楼层
call它一下
  1. @echo off
  2. set 最大文件前缀编号=2

  3. for /l %%x in (1001,1,1210) do call :Next %%x
  4.    
  5. :Next
  6. set "y=%1"
  7. cd /d "d:\文本\文本1\%y:~1%\lishi"
  8. (for /l %%a in (0,1,%最大文件前缀编号%) do (
  9.      setlocal enabledelayedexpansion   
  10.      for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
  11.          if not defined #_%%b_Min (
  12.              set/a #_%%b_Max=#_%%b_Min=%%c
  13.              set "str=!str! %%b"
  14.          ) else (
  15.              if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
  16.          )
  17.     )
  18.     for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
  19.     endlocal
  20. ))>"..\a.txt"
复制代码
发表于 2014-9-18 12:51:59 | 显示全部楼层

  1. @echo off

  2. set 最大文件前缀编号=2

  3. for /l %%x in (1001,1,1002) do (
  4.   set y=%%x
  5.   for /l %%a in (0,1,%最大文件前缀编号%) do (
  6.      setlocal enabledelayedexpansion
  7.      cd /d "d:\文本\文本1\!y:~1!\lishi"
  8.      for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
  9.         if not defined #_%%b_Min (
  10.            set/a #_%%b_Max=#_%%b_Min=%%c
  11.            set "str=!str! %%b"
  12.         ) else (
  13.            if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
  14.         )
  15.      )
  16.   for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!>>"d:\文本\!y:~1!.txt"
  17.   endlocal
  18.   )
  19. )
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 解决问题。谢谢帮助!

查看全部评分

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

本版积分规则

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

GMT+8, 2026-3-21 00:24 , Processed in 0.031619 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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