标题: [文本处理] [已解决]批处理for嵌套中if无法实现判断? [打印本页]
作者: sky02 时间: 2011-5-16 22:57 标题: [已解决]批处理for嵌套中if无法实现判断?
本帖最后由 sky02 于 2011-5-17 10:15 编辑
1.txt内容:
10001
10005
10004
10003
10006
.....
2.txt
10001 外用药
10002 内服药
10003 注射剂
10004 医疗器械
10005 其它
想把1.txt的内容变成这样一个效果:
10001:外用药
10005:其它
10004:医疗器械
10003:注射剂
10006:未找到匹配类型
写了一段,运行后除了第一行其它都出现了"未找到匹配类型",请问是哪里出错了?- @echo off
- setlocal EnableDelayedExpansion
- for /f "delims=" %%i in (1.txt) do (
- for /f "tokens=1,*" %%j in (2.txt) do (
- if "%%i"=="%%j" (
- echo %%i:%%k>>3.txt) else (
- echo %%i:未找到匹配类型>>3.txt)))
- pause
复制代码
作者: CrLf 时间: 2011-5-16 23:25
- @echo off
- (for /f "tokens=1* delims=:" %%a in ('findstr /b /g:1.txt 2.txt') do echo %%a:%%b
- for /f "tokens=1* delims=:" %%a in ('findstr /b /v /g:1.txt 2.txt') do echo %%a:未找到匹配类型
- )>tmp
- sort tmp>3.txt
复制代码
作者: CrLf 时间: 2011-5-16 23:27
楼主代码的问题在于逻辑,假设2.txt100行,那么用if else来判断将会出现1行匹配的和【99行不匹配的】
作者: sky02 时间: 2011-5-16 23:35
本帖最后由 sky02 于 2011-5-16 23:41 编辑
2# zm900612
还是不行,1.txt是个操作文本,2.txt是个条件文本,如果把ELSE后面那句去掉就能执行2.txt条件中有的,但2.txt条件中没有的则不会显示,所以才加了个ELSE进去,加进去以后发现都不会判断了
作者: yjstone 时间: 2011-5-17 01:38
本帖最后由 yjstone 于 2011-5-17 01:43 编辑
首先,你的代码问题在于:
1、3楼所说的原因;
2、2.txt文本从第二行起每行的数字与汉字之间的间隔不是英文空格,所以变量%%j的内容从第二行起分别是“10002 内服药”;“10003 注射剂";"10004 医疗器械”;"10005 其它",这与分析第一个文本1.txt产生的变量%%i(五位数字)来比较自然不会相等的。
如果2.txt每行行首的数字都是固定的5位数,你可以用如下的批处理解决你的问题:- @echo off
- setlocal EnableDelayedExpansion
- for /f %%i in (1.txt) do (
- set "out="
- for /f "tokens=1,*" %%j in (2.txt) do (
- set str=%%j
- if "%%i"=="!str:~,5!" echo %%i : !str:~6!%%k>>3.txt &set out=yes)
- if not defined out echo %%i : 未找到匹配类型>>3.txt
- )
- pause
复制代码
作者: techon 时间: 2011-5-17 03:09
2.txt 中
[quote]
10001 外用药
[quote]
10001 和 外用药 之间使用的是 全角空格, for /f 默认只将半角空格和 TAB 制表符 作为分隔符- @echo off
- setlocal EnableDelayedExpansion
- for /f "delims=" %%i in (1.txt) do (
- set t=0
- for /f "tokens=1,* delims= " %%j in (2.txt) do (
- if "%%i"=="%%j" echo %%i:%%k>>3.txt&set t=1
- )
- if !t! neq 1 echo %%i:未找到匹配类型>>3.txt
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |