无忧启动论坛

标题: 批处理怎么查找txt文本里面的某个数字? [打印本页]

作者: 熄灭的烟    时间: 2018-1-23 19:35
标题: 批处理怎么查找txt文本里面的某个数字?
1.txt文本文档内容为:test=521。

请问批处理要怎么查找这个txt文本里面的test=521这行,然后判断大于500,小于530就执行ipconfig命令,条件不成立就跳开执行批处理下一行命令。

各位批处理大大帮忙看看,这个功能的批处理要怎么写。感谢!!!
作者: nttwqz    时间: 2018-1-23 22:32
@echo off
pushd %~dp0
for /f "tokens=2 delims==" %%a in ('type 1.txt ^| findstr /r /i "test=[0-9]"') do set "num=%%a"
if %num% gtr 500 if %num% lss 530 ipconfig
pause
作者: 熄灭的烟    时间: 2018-1-23 22:52
nttwqz 发表于 2018-1-23 22:32
@echo off
pushd %~dp0
for /f "tokens=2 delims==" %%a in ('type 1.txt ^| findstr /r /i "test=[0-9]" ...

测试OK,但如果txt文本文档里面不是test=521,而是直接就是521AA呢?
作者: nttwqz    时间: 2018-1-23 22:56
熄灭的烟 发表于 2018-1-23 22:52
测试OK,但如果txt文本文档里面不是test=521,而是直接就是521AA呢?

你是自己学着玩儿??

建议看一下set命令
作者: 熄灭的烟    时间: 2018-1-23 23:28
nttwqz 发表于 2018-1-23 22:56
你是自己学着玩儿??

建议看一下set命令

不是学着玩,是要弄个批处理检索文件。521AA的问题我已经解决了。但是卡在521 AA,521跟AA中间有个空格我就不知道怎么弄了。N大在帮我看看怎么改可以识别空格
作者: 熄灭的烟    时间: 2018-1-23 23:29
nttwqz 发表于 2018-1-23 22:56
你是自己学着玩儿??

建议看一下set命令

1.txt文本文档内容为:521 AA。

请问批处理要怎么查找这个txt文本里面的521 AA这行,然后判断大于500,小于530就执行ipconfig命令,条件不成立就跳开执行批处理下一行命令。
521 AA(521跟AA中间有空格)
各位批处理大大帮忙看看,这个功能的批处理要怎么写。感谢!!!
作者: nttwqz    时间: 2018-1-23 23:47
熄灭的烟 发表于 2018-1-23 23:28
不是学着玩,是要弄个批处理检索文件。521AA的问题我已经解决了。但是卡在521 AA,521跟AA中间有个空格我 ...

"tokens=1,2"
delims不要了

如果你只要前面的数字更简单
for /f %%a in (1.txt) do set numb=%%a
作者: 熄灭的烟    时间: 2018-1-24 15:05
本帖最后由 熄灭的烟 于 2018-1-24 15:07 编辑
nttwqz 发表于 2018-1-23 23:47
"tokens=1,2"
delims不要了



Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上: YXD--1709221625

DISKPART>
  磁盘 ###  状态           大小     可用     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---        
  磁盘 1    联机              521 GB  5120 KB         

DISKPART>



txt文本内容如上面那样的呢,我怎么检索到大小下面的521 GB,并且判断大于500,小于530.条件符合就执行ipconfig,不符合就跳空执行下一条命令。
作者: nttwqz    时间: 2018-1-24 19:24
熄灭的烟 发表于 2018-1-24 15:05
Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上:  ...

不同的文本,处理方法也不同。

一般而言,处理文本常用的命令有:for set more type find findstr,for set findstr复杂一点,findstr还会涉及一点儿正则表达式

对于上面的文本:

for /f "tokens=3,4" %%i in ('find /i "GB" test.txt') do set "disksize=%%i %%j"

不过不要单位:

for /f "tokens=3" %%i in ('find /i "GB" test.txt') do set "disksize=%%i"
作者: 熄灭的烟    时间: 2018-1-25 17:27
本帖最后由 熄灭的烟 于 2018-1-25 17:29 编辑

@echo off
pushd %~dp0
for /f "tokens=3,4" %%i in ('find /i "GB" test.txt') do set "disksize=%%i %%j"
if %num% gtr 500 if %num% lss 530 ipconfig
pause



无论是for /f "tokens=3" %%i in ('find /i "GB" test.txt') do set "disksize=%%i"   还是for /f "tokens=3,4" %%i in ('find /i "GB" test.txt') do set "disksize=%%i %%j",运行后命令行窗口一闪而过,不起作用啊。
作者: nttwqz    时间: 2018-1-25 20:25
熄灭的烟 发表于 2018-1-25 17:27
@echo off
pushd %~dp0
for /f "tokens=3,4" %%i in ('find /i "GB" test.txt') do set "disksize=%%i %% ...

查错了,是4,5
作者: 熄灭的烟    时间: 2018-1-26 11:08
nttwqz 发表于 2018-1-25 20:25
查错了,是4,5

@echo on
pushd %~dp0
for /f "tokens=4,5" %%i in ('find /i "GB" ok.txt') do set "disksize=%%i %%j"
if %num% gtr 500 if %num% lss 530 ipconfig
pause

大哥,这样也不行啊。还是运行后一闪而过。
作者: 熄灭的烟    时间: 2018-1-26 11:24
nttwqz 发表于 2018-1-25 20:25
查错了,是4,5

研究了下,能取到数字了。但是到了if %num% gtr 500 if %num% lss 530 ipconfig 判断这里就一闪而过了。请问这里要怎么改啊?
作者: 熄灭的烟    时间: 2018-1-26 11:41
nttwqz 发表于 2018-1-24 19:24
不同的文本,处理方法也不同。

一般而言,处理文本常用的命令有:for set more type find findstr,fo ...

多谢N大,已经成功搞定了。原来要把判断变量num改成disksize就可以了。

非常感谢N大,帮我解决了问题,同时又教会了我很多。
作者: moran    时间: 2018-6-3 23:30
熄灭的烟 发表于 2018-1-26 11:41
多谢N大,已经成功搞定了。原来要把判断变量num改成disksize就可以了。

非常感谢N大,帮我解决了问题 ...

参考你这个,写了一个判断数值最大和最小,貌似不行啊。
主要问题是最大值只要在判断值范围内,最小值不管在不在范围内,都算成功。
这个不知道应该怎么解?
作者: 熄灭的烟    时间: 2018-6-4 16:25
moran 发表于 2018-6-3 23:30
参考你这个,写了一个判断数值最大和最小,貌似不行啊。
主要问题是最大值只要在判断值范围内,最小值不 ...

我的判断值值要求就是这样的,只要满足一个条件就可以了。如果达到你那样的要求,可能你需要更改。




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3