Board logo

标题: [文本处理] [已解决]批处理if判断问题 [打印本页]

作者: q282267252    时间: 2020-6-8 01:02     标题: [已解决]批处理if判断问题

本帖最后由 q282267252 于 2020-6-9 16:13 编辑

希望达到效果是:在文本中查找到数值后,if判断数字小于100后执行,大于100不执行。

下面是我写的代码,数值大于100还是会执行后面的命令,请高手看一下出错在那里?谢谢。
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set ts=100
  4. for /f  "tokens=2 delims=,"  %%i  in (wz.txt) do (
  5. if  "%%i" lss  "%ts%"  (
  6. for /f  "tokens=1 delims=," %%n in (' find /i  "%%i" wz.txt') do (
  7. for /f  "tokens=2 delims=:" %%k  in ('find /i "%%n" sp.txt') do (
  8. set k=%%k
  9. set k=!k://=http://!
  10. echo,!k!
  11. )
  12. )
  13. )
  14. )
复制代码
pause
作者: flashercs    时间: 2020-6-8 07:30

批处理if比较大小要注意数据类型,if "%%i" lss "%ts%" 这是字符串比较,而if %%i lss %ts%,如果两者都是数字且未超出32位整数范围,那么是整数比较大小.
作者: q282267252    时间: 2020-6-8 11:46

回复 2# flashercs
感谢解答,if %%i lss %ts% 不加引号比较也尝试过,数字大于100还是会执行后面命令,%%i数值在1000以内,%ts%数值是固定的100,想实现数据小于100执行后面命令,大于100不执行后面命令。
作者: flashercs    时间: 2020-6-8 12:02

回复 3# q282267252
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set ts=100
  4. for /f  "tokens=2 delims=,"  %%i  in (wz.txt) do (
  5. if  %%i lss  %ts%  (
  6.   echo i=%%i
  7. for /f  "tokens=1 delims=," %%n in (' find /i  "%%i" wz.txt') do (
  8. for /f  "tokens=2 delims=:" %%k  in ('find /i "%%n" sp.txt') do (
  9. set k=%%k
  10. set k=!k://=http://!
  11. echo,!k!
  12. )
  13. )
  14. )
  15. )
复制代码
你看看输出的i数值是否正确?
作者: q282267252    时间: 2020-6-8 12:23

回复 4# flashercs
输出的数值是正确的。大于100数值的也会显示。
作者: flashercs    时间: 2020-6-8 12:29

回复 5# q282267252


    那你的%%i肯定含有非数字符号,例如空格.可以把原文本发个示例
作者: q282267252    时间: 2020-6-8 12:50

本帖最后由 q282267252 于 2020-6-8 12:54 编辑

回复 6# flashercs
wz.txt 文本内容如下:
  1. www.baidu.com, 121
  2. www.qq.cn, 82
  3. cdn.XXXX.vip, 4
  4. api.XXXX.com, 35
  5. XXX.cc, 4
  6. XXX.ren, 50
  7. XXX.com, 255
  8. XXX.com, 40
  9. XXXX.com, 285
  10. XXX.com, 138
复制代码
用你前面发的代码后输出结果为:
http://www.baidu.com/
i= 121
http://www.qq.cn/
i= 82
http://cdn.XXXX.vip/
i= 4
………………
作者: flashercs    时间: 2020-6-8 12:54

回复 7# q282267252
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set ts=100
  4. for /f  "tokens=2 delims=, "  %%i  in (wz.txt) do (
  5. if  %%i lss  %ts%  (
  6.   echo i=%%i
  7. for /f  "tokens=1 delims=," %%n in (' find /i  "%%i" wz.txt') do (
  8. for /f  "tokens=2 delims=:" %%k  in ('find /i "%%n" sp.txt') do (
  9. set k=%%k
  10. set k=!k://=http://!
  11. echo,!k!
  12. )
  13. )
  14. )
  15. )
复制代码
果然第二列 数字 前后都有空格,代码改成这样就可以过滤空格.
作者: q282267252    时间: 2020-6-8 13:17

回复 8# flashercs
感谢您的耐心解答,修改后显示i=数值 都是100以内的,但是有两个问题不知道是不是for引起的?
1、小于100数值的网站重复输出2次或者3次。
2、wz.txt内数值为216,echo,i=%%i 显示数数值为6
作者: flashercs    时间: 2020-6-8 14:13

回复 9# q282267252


    问题复杂了,文本内容不清楚,不知道什么原因.
作者: Batcher    时间: 2020-6-9 17:16

回复 9# q282267252


    请把你测试用的txt文件和bat文件打包压缩传上来我试试
作者: q282267252    时间: 2020-6-11 10:55

本帖最后由 q282267252 于 2020-6-11 10:58 编辑

回复 11# Batcher
感谢管理员抽空来解答问题 ,自己后面已排查出原因。
1、小于100数值的网站重复输出2次或者3次。
数值重复出现是因为TXT文本中第二列数值有相同的数值,所以重复出现,最后输出文本添加删除重复数据代码解决
2、wz.txt内数值为216,echo,i=%%i 显示数数值为6
使用搜索命令不是精确匹配造成,修改为: findstr /r  "*, \<%%i\>" 解决。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2