找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23112|回复: 11

[文本处理] [已解决]批处理if判断问题

[复制链接]
发表于 2020-6-8 01:02:23 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2020-6-8 07:30:38 | 显示全部楼层
批处理if比较大小要注意数据类型,if "%%i" lss "%ts%" 这是字符串比较,而if %%i lss %ts%,如果两者都是数字且未超出32位整数范围,那么是整数比较大小.

评分

参与人数 1技术 +1 收起 理由
q282267252 + 1 乐于助人

查看全部评分

 楼主| 发表于 2020-6-8 11:46:20 | 显示全部楼层
回复 2# flashercs
感谢解答,if %%i lss %ts% 不加引号比较也尝试过,数字大于100还是会执行后面命令,%%i数值在1000以内,%ts%数值是固定的100,想实现数据小于100执行后面命令,大于100不执行后面命令。
发表于 2020-6-8 12:02:27 | 显示全部楼层
回复 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数值是否正确?
 楼主| 发表于 2020-6-8 12:23:19 | 显示全部楼层
回复 4# flashercs
输出的数值是正确的。大于100数值的也会显示。
发表于 2020-6-8 12:29:29 | 显示全部楼层
回复 5# q282267252


    那你的%%i肯定含有非数字符号,例如空格.可以把原文本发个示例
 楼主| 发表于 2020-6-8 12:50:14 | 显示全部楼层
本帖最后由 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
………………
发表于 2020-6-8 12:54:41 | 显示全部楼层
回复 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技术 +1 收起 理由
q282267252 + 1 乐于助人

查看全部评分

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


    问题复杂了,文本内容不清楚,不知道什么原因.
发表于 2020-6-9 17:16:28 | 显示全部楼层
回复 9# q282267252


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

评分

参与人数 1技术 +1 收起 理由
q282267252 + 1 乐于助人

查看全部评分

 楼主| 发表于 2020-6-11 10:55:40 | 显示全部楼层
本帖最后由 q282267252 于 2020-6-11 10:58 编辑

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:34 , Processed in 0.024267 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表