标题: [文本处理] [已解决]批处理if判断问题 [打印本页]
作者: q282267252 时间: 2020-6-8 01:02 标题: [已解决]批处理if判断问题
本帖最后由 q282267252 于 2020-6-9 16:13 编辑
希望达到效果是:在文本中查找到数值后,if判断数字小于100后执行,大于100不执行。
下面是我写的代码,数值大于100还是会执行后面的命令,请高手看一下出错在那里?谢谢。- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- set ts=100
- for /f "tokens=2 delims=," %%i in (wz.txt) do (
- if "%%i" lss "%ts%" (
- for /f "tokens=1 delims=," %%n in (' find /i "%%i" wz.txt') do (
- for /f "tokens=2 delims=:" %%k in ('find /i "%%n" sp.txt') do (
- set k=%%k
- set k=!k://=http://!
- echo,!k!
- )
- )
- )
- )
复制代码
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 - @echo off
- setlocal ENABLEDELAYEDEXPANSION
- set ts=100
- for /f "tokens=2 delims=," %%i in (wz.txt) do (
- if %%i lss %ts% (
- echo i=%%i
- for /f "tokens=1 delims=," %%n in (' find /i "%%i" wz.txt') do (
- for /f "tokens=2 delims=:" %%k in ('find /i "%%n" sp.txt') do (
- set k=%%k
- set k=!k://=http://!
- echo,!k!
- )
- )
- )
- )
复制代码
你看看输出的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 文本内容如下:- www.baidu.com, 121
- www.qq.cn, 82
- cdn.XXXX.vip, 4
- api.XXXX.com, 35
- XXX.cc, 4
- XXX.ren, 50
- XXX.com, 255
- XXX.com, 40
- XXXX.com, 285
- 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 - @echo off
- setlocal ENABLEDELAYEDEXPANSION
- set ts=100
- for /f "tokens=2 delims=, " %%i in (wz.txt) do (
- if %%i lss %ts% (
- echo i=%%i
- for /f "tokens=1 delims=," %%n in (' find /i "%%i" wz.txt') do (
- for /f "tokens=2 delims=:" %%k in ('find /i "%%n" sp.txt') do (
- set k=%%k
- set k=!k://=http://!
- echo,!k!
- )
- )
- )
- )
复制代码
果然第二列 数字 前后都有空格,代码改成这样就可以过滤空格.
作者: 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://www.bathome.net/) |
Powered by Discuz! 7.2 |