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

[文本处理] [已解决]批处理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:未找到匹配类型

写了一段,运行后除了第一行其它都出现了"未找到匹配类型",请问是哪里出错了?
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.   for /f "tokens=1,*" %%j in (2.txt) do (
  5.    if "%%i"=="%%j" (
  6.   echo %%i:%%k>>3.txt) else (
  7.      echo %%i:未找到匹配类型>>3.txt)))
  8. pause
复制代码
1

评分人数

    • hanyeguxing: 感谢给帖子标题标注[已解决]字样PB + 2

2.txt 中
[quote]
10001 外用药
[quote]
10001 和 外用药 之间使用的是 全角空格, for /f 默认只将半角空格和 TAB 制表符 作为分隔符
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.   set t=0
  5.   for /f "tokens=1,* delims=  " %%j in (2.txt) do (
  6.    if "%%i"=="%%j" echo %%i:%%k>>3.txt&set t=1
  7.   )
  8.   if !t! neq 1 echo %%i:未找到匹配类型>>3.txt
  9. )
  10. pause
复制代码
1

评分人数

    • sky02: 测试可行,谢谢!技术 + 1

TOP

本帖最后由 yjstone 于 2011-5-17 01:43 编辑

首先,你的代码问题在于:
1、3楼所说的原因;
2、2.txt文本从第二行起每行的数字与汉字之间的间隔不是英文空格,所以变量%%j的内容从第二行起分别是“10002 内服药”;“10003 注射剂";"10004 医疗器械”;"10005 其它",这与分析第一个文本1.txt产生的变量%%i(五位数字)来比较自然不会相等的。
如果2.txt每行行首的数字都是固定的5位数,你可以用如下的批处理解决你的问题:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /f %%i in (1.txt) do (
  4. set "out="
  5. for /f "tokens=1,*" %%j in (2.txt) do (
  6. set str=%%j
  7. if "%%i"=="!str:~,5!" echo %%i : !str:~6!%%k>>3.txt &set out=yes)
  8. if not defined out echo %%i : 未找到匹配类型>>3.txt
  9. )
  10. pause
复制代码
1

评分人数

    • sky02: 2.txt不都是五位的技术 + 1

TOP

本帖最后由 sky02 于 2011-5-16 23:41 编辑

2# zm900612
还是不行,1.txt是个操作文本,2.txt是个条件文本,如果把ELSE后面那句去掉就能执行2.txt条件中有的,但2.txt条件中没有的则不会显示,所以才加了个ELSE进去,加进去以后发现都不会判断了

TOP

楼主代码的问题在于逻辑,假设2.txt100行,那么用if else来判断将会出现1行匹配的和【99行不匹配的】

TOP

  1. @echo off
  2. (for /f "tokens=1* delims=:" %%a in ('findstr /b /g:1.txt 2.txt') do echo %%a:%%b
  3. for /f "tokens=1* delims=:" %%a in ('findstr /b /v /g:1.txt 2.txt') do echo %%a:未找到匹配类型
  4. )>tmp
  5. sort tmp>3.txt
复制代码

TOP

返回列表