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

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

本帖最后由 思想之翼 于 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. )
复制代码

  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

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

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"
复制代码

TOP

本帖最后由 思想之翼 于 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\  内的数据没有统计。

TOP

第一次循环已经 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. )
复制代码

TOP

详细描述一下“出错”

TOP

返回列表