标题: [文本处理] 【已解决】BAT:如何将多个类似的代码合而为一 [打印本页]
作者: 思想之翼 时间: 2014-9-17 19:12 标题: 【已解决】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个类似代码合并,出错。如何修改?- @echo off&setlocal enabledelayedexpansion
- for /l %%x in (1001,1,1210) do (
- set y=%%x
- cd /d "d:\文本\文本1\!y:~1!\lishi\"
- set 最大文件前缀编号=2
- (for /l %%a in (0,1,%最大文件前缀编号%) do (
- 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\!y:~1!\a.txt
- )
复制代码
作者: DAIC 时间: 2014-9-17 20:52
详细描述一下“出错”
作者: CrLf 时间: 2014-9-17 20:54
第一次循环已经 cd 到子目录里了,后面的循环会找得到文件吗?
还有 %最大文件前缀编号% 应该用变量延迟。
楼主的意思是这样吧:- @echo off&setlocal enabledelayedexpansion
- for /l %%x in (1001,1,1210) do (
- set y=%%x
- pushd "d:\文本\文本1\!y:~1!\lishi\"
-
- set 最大文件前缀编号=2
- (for /l %%a in (0,1,!最大文件前缀编号!) do (
- 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\!y:~1!\a.txt
-
- popd
- )
复制代码
作者: 思想之翼 时间: 2014-9-17 23:43
本帖最后由 思想之翼 于 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\ 内的数据没有统计。
作者: apang 时间: 2014-9-18 09:41
call它一下- @echo off
- set 最大文件前缀编号=2
-
- for /l %%x in (1001,1,1210) do call :Next %%x
-
- :Next
- set "y=%1"
- cd /d "d:\文本\文本1\%y:~1%\lishi\"
- (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
- ))>"..\a.txt"
复制代码
作者: xxpinqz 时间: 2014-9-18 12:51
- @echo off
-
- set 最大文件前缀编号=2
-
- for /l %%x in (1001,1,1002) do (
- set y=%%x
- for /l %%a in (0,1,%最大文件前缀编号%) do (
- setlocal enabledelayedexpansion
- cd /d "d:\文本\文本1\!y:~1!\lishi\"
- 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!>>"d:\文本\!y:~1!.txt"
- endlocal
- )
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |