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

[文本处理] [已解决]批处理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

批处理if比较大小要注意数据类型,if "%%i" lss "%ts%" 这是字符串比较,而if %%i lss %ts%,如果两者都是数字且未超出32位整数范围,那么是整数比较大小.
1

评分人数

微信:flashercs
QQ:49908356

TOP

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

TOP

回复 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数值是否正确?
微信:flashercs
QQ:49908356

TOP

回复 4# flashercs
输出的数值是正确的。大于100数值的也会显示。

TOP

回复 5# q282267252


    那你的%%i肯定含有非数字符号,例如空格.可以把原文本发个示例
微信:flashercs
QQ:49908356

TOP

本帖最后由 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
………………

TOP

回复 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. )
复制代码
果然第二列 数字 前后都有空格,代码改成这样就可以过滤空格.
1

评分人数

微信:flashercs
QQ:49908356

TOP

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

TOP

回复 9# q282267252


    问题复杂了,文本内容不清楚,不知道什么原因.
微信:flashercs
QQ:49908356

TOP

回复 9# q282267252


    请把你测试用的txt文件和bat文件打包压缩传上来我试试
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

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

TOP

返回列表