中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-24 20:12
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 查找带有空格的字符串 查看 1,951 回复 27
楼 主 查找带有空格的字符串 发表于 2008-10-04 13:35 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
findstr "%abc%" "test.txt">"查到的号.txt"

我要查找的变量%abc%是这样的类型:
" 7777"
"7777 "
即数字前面或后面有个空格.要求查找时满足条件要求,严格匹配,举个例:
查找" 7777"

*正确的搜索结果为:
7777183
7777254

*不正确的结果是(上面代码搜出来就是这样):

7777183
7777254
3577776
4777724
......
(7777前面必须带有一个空格的指令没被接受,只含7777在中间的也出来了)

大虾帮改正下,感谢!!
2 发表于 2008-10-04 14:40 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
FINDSTR
]
strings filename]

/B 在一行的开始配对模式。

加上 /B 参数,就只匹配开头为 7777 的行。
3 发表于 2008-10-04 14:47 ·  中国 福建 泉州 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by tireless at 2008-10-4 14:40:

加上 /B 参数,就只匹配开头为 7777 的行。

测试好象不能通过..
假如还要找在后面甚至在中间的,有个通用的法子吗?

[ Last edited by ka56 on 2008-10-4 at 14:50 ]
4 [原创]WOW05 发表于 2008-10-04 15:22 ·  中国 浙江 杭州 华数宽带
新手上路
积分 2
发帖 1
注册 2008-10-04 15:01
17年会员
UID 127403
性别 女
状态 离线
5 发表于 2008-10-04 15:28 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by ka56 at 2008-10-4 01:35 PM:
*正确的搜索结果为:
7777183
7777254

上看下看左看右看,还是没有看到“正确的搜索结果”中什么地方有空格,被论坛过滤掉了?
不知道是不是这个意思:
findstr /c:" 7777" a.txt
6 发表于 2008-10-04 15:49 ·  中国 福建 泉州 石狮市 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by HAT at 2008-10-4 15:28:

上看下看左看右看,还是没有看到“正确的搜索结果”中什么地方有空格,被论坛过滤掉了?
不知道是不是这个意思:
findstr /c:" 7777" a.txt


被过滤了,变量是随机,所以有点麻烦~~
7 发表于 2008-10-04 16:02 ·  中国 福建 泉州 石狮市 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
最大的特点是,字符串的前面或后面有一个空格.
8 发表于 2008-10-04 16:20 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt>>查到的号.txt


结尾:
for %%a in ("7777 " "7777$") do findstr /r /c:%%a test.txt>>查到的号.txt


中间...(办法比较笨)
for /f "tokens=*" %%a in ('findstr /v /r /c:"7777 " test.txt^|findstr /v /r /c:"7777$"^|findstr /v /r /c:" 7777"^|findstr /v /r /c:"^7777"') do echo %%a>>查到的号.txt


[ Last edited by tireless on 2008-10-4 at 17:28 ]
9 发表于 2008-10-04 16:28 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
@echo off
for /f "delims=" %%a in (test.txt) do (
for /f "tokens=*" %%i in ("%%a") do (
if "%%a" neq "%%i" echo %%a
))
pause
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
10 发表于 2008-10-04 17:17 ·  中国 福建 泉州 石狮市 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by tireless at 2008-10-4 16:20:
开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt>>查到的号.txt


结尾:
for %%a in ("7777 " "7777$") do fi ... 


结尾的可以找出来,开头的不行,,
11 发表于 2008-10-04 17:47 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
Originally posted by ka56 at 2008-10-4 05:17 PM:


结尾的可以找出来,开头的不行,,

我测试没有问题。
@echo off
echo 开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt
echo.
echo 结尾:&pause
for %%a in ("7777 " "7777$") do findstr /r /c:%%a test.txt
echo.
echo 中间:&pause
for /f %%a in ('findstr /v /r /c:"7777 " test.txt^|findstr /v /r /c:"7777$"^|findstr /v /r /c:" 7777"^|findstr /v /r /c:"^7777"') do echo %%a
pause
12 发表于 2008-10-04 17:49 ·  中国 四川 成都 电信
中级用户
★★
积分 297
发帖 135
注册 2006-10-21 12:00
19年会员
UID 67627
性别 男
状态 离线
只能怪findstr的正则太肉了,遇到空格就傻眼。
那就查找2次吧
for /f "delims=" %%a in ('findstr /i /c:" 7777" a.txt ^& findstr /i /c:"7777 " a.txt') do echo %%a
13 发表于 2008-10-04 17:57 ·  中国 广西 南宁 电信
初级用户
积分 115
发帖 45
注册 2007-03-03 10:09
19年会员
UID 80655
性别 男
状态 离线
Originally posted by zqz0012005 at 2008-10-4 05:49 PM:
只能怪findstr的正则太肉了,遇到空格就傻眼。
那就查找2次吧
for /f "delims=" %%a in ('findstr /i /c:" 7777" a.txt ^& findstr /i /c:"7777 & ... 

对!还是linux工具好,sed和grep都正常:
sed -n "/^ 7777/p" test.txt
grep "^ 7777" test.txt

不过以下语句好象也可以。
findstr /rc:"^ 7777" test.txt
14 Re 13楼 发表于 2008-10-04 18:10 ·  中国 四川 成都 电信
中级用户
★★
积分 297
发帖 135
注册 2006-10-21 12:00
19年会员
UID 67627
性别 男
状态 离线
我要查找的变量%abc%是这样的类型:
" 7777"
"7777 "
即数字前面或后面有个空格.要求查找时满足条件要求,严格匹配


你这个只能查找开头是空格接着是7777的字符串,没理解楼主的要求
15 发表于 2008-10-04 18:27 ·  中国 福建 泉州 石狮市 电信
中级用户
★★
积分 234
发帖 129
注册 2006-11-28 09:21
19年会员
UID 71989
性别 男
状态 离线
Originally posted by zqz0012005 at 2008-10-4 18:10:


你这个只能查找开头是空格接着是7777的字符串,没理解楼主的要求

开头是空格接着是7777的字符串
这个我是用一个变量,试了几个虾虾的代码都找不出来,邪门了....

@echo off
@echo WScript.StdOut.Write(new ActiveXObject('htmlfile').parentWindow.clipboardData.getData('text'))> tmp.js 2>nul
@for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a >nul 2>nul
@del tmp.js /f /q >nul 2>nul
@echo %ClipboardText%
findstr "%ClipboardText%" "用来查找的文档.txt">"查到的号.txt"
type 查到的号.txt| clip


这是我原来的代码.

用来查找的文档.txt的格式:(每行的开头结尾都有个空格)

77773050
77775081
15686081
29682122
30290010
31481070
37887777
37890100
37897777
45089031
45980031
---------------------------------------------------

思路:我只要先复制"7777",运行批处理,就能把" 7777"开头和"7777 "结尾的四个号都搜出来了...

根据tireless兄的代码,我整理如下:
@echo off
@echo WScript.StdOut.Write(new ActiveXObject('htmlfile').parentWindow.clipboardData.getData('text'))> tmp.js 2>nul
@for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a >nul 2>nul
@del tmp.js /f /q >nul 2>nul
@echo %ClipboardText%
for %%g in (" %ClipboardText%" "^ %ClipboardText%") do findstr /rc:%%g 用来查找的文档.txt>"查到的号.txt"
for %%b in ("%ClipboardText%$") do findstr /r /c:%%b 用来查找的文档.txt>>"查到的号.txt"
type 查到的号.txt| clip

但只能找出结尾的出来:

37887777
37897777

哪位大虾再帮我指教下....

[ Last edited by ka56 on 2008-10-4 at 18:29 ]
论坛跳转: