Board logo

标题: 查找带有空格的字符串 [打印本页]

作者: ka56     时间: 2008-10-4 13:35    标题: 查找带有空格的字符串

findstr "%abc%" "test.txt">"查到的号.txt"

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

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

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

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

大虾帮改正下,感谢!!
作者: tireless     时间: 2008-10-4 14:40


  Quote:
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

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

加上 /B 参数,就只匹配开头为 7777 的行。
作者: ka56     时间: 2008-10-4 14:47


  Quote:
Originally posted by tireless at 2008-10-4 14:40:

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

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

[ Last edited by ka56 on 2008-10-4 at 14:50 ]
作者: bel87     时间: 2008-10-4 15:22    标题: [原创]WOW05

final fantasy xi gil
buy final fantasy xi gil
cheap final fantasy xi gil
buy ffxi gil
ffxi gil
cheap ffxi gil
wow gold
cheap wow gold
buy wow gold
world of warcraft gold
cheap world of warcraft gold
buy world of warcraft gold
buy warhammer gold
warhammer gold
cheap warhammer gold
buy warhammer online gold
warhammer online gold
cheap warhammer online gold
buy eq plat
buy everquest platinum
buy age of conan gold
age of conan gold
aoc gold
wow power leveling
Anyone of you bought/sold any wow gold from www.belrion.com ? I was told they deliver and are good and fast, appreciate if

anyone here can give me some feedback ^^
作者: HAT     时间: 2008-10-4 15:28


  Quote:
Originally posted by ka56 at 2008-10-4 01:35 PM:
*正确的搜索结果为:
7777183
7777254

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

作者: ka56     时间: 2008-10-4 15:49


  Quote:
Originally posted by HAT at 2008-10-4 15:28:

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

被过滤了,变量是随机,所以有点麻烦~~
作者: ka56     时间: 2008-10-4 16:02
最大的特点是,字符串的前面或后面有一个空格.
作者: tireless     时间: 2008-10-4 16:20
开头:
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 ]
作者: pusofalse     时间: 2008-10-4 16:28

@echo off
for /f "delims=" %%a in (test.txt) do (
      for /f "tokens=*" %%i in ("%%a") do (
           if "%%a" neq "%%i" echo %%a
))
pause

作者: ka56     时间: 2008-10-4 17:17


  Quote:
Originally posted by tireless at 2008-10-4 16:20:
开头:
for %%a in (" 7777" "^7777") do findstr /r /c:%%a test.txt>>查到的号.txt
结尾:
[code]for %%a in ("7777 " "7777$") do fi ...

结尾的可以找出来,开头的不行,,
作者: tireless     时间: 2008-10-4 17:47


  Quote:
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

作者: zqz0012005     时间: 2008-10-4 17:49
只能怪findstr的正则太肉了,遇到空格就傻眼。
那就查找2次吧
for /f "delims=" %%a in ('findstr /i /c:" 7777" a.txt ^& findstr /i /c:"7777 " a.txt') do echo %%a

作者: ceii     时间: 2008-10-4 17:57


  Quote:
Originally posted by zqz0012005 at 2008-10-4 05:49 PM:
只能怪findstr的正则太肉了,遇到空格就傻眼。
那就查找2次吧
[code]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
作者: zqz0012005     时间: 2008-10-4 18:10    标题: Re 13楼



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

你这个只能查找开头是空格接着是7777的字符串,没理解楼主的要求
作者: ka56     时间: 2008-10-4 18:27


  Quote:
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 ]
作者: ka56     时间: 2008-10-4 18:31
开头和结尾用一个空格是为了美观...
作者: ka56     时间: 2008-10-4 20:14
for %%g in (" %ClipboardText%" "^%ClipboardText%") do findstr /r /c:%%g 用来查找的文档.txt>"查到的号.txt"

这句无效,不会改了
作者: ceii     时间: 2008-10-4 21:00


  Quote:
Originally posted by ka56 at 2008-10-4 06:27 PM:
开头是空格接着是7777的字符串
这个我是用一个变量,试了几个虾虾的代码都找不出来,邪门了....

这个也不行?
findstr /rc:"^ 7777" test.txt

作者: ka56     时间: 2008-10-4 21:11


  Quote:
Originally posted by ceii at 2008-10-4 21:00:

这个也不行?
findstr /rc:"^ 7777" test.txt

findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt

我换成这样,不行,呵呵
作者: ceii     时间: 2008-10-4 21:21

set ClipboardText=7777
findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt
我试了也可以啊!
作者: ka56     时间: 2008-10-4 21:30


  Quote:
Originally posted by ceii at 2008-10-4 21:21:
set ClipboardText=7777
findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt
我试了也可以啊!

把代码合在一起试下,有劳了!!
@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 /rc:"^ %ClipboardText%" 用来查找的号文档.txt>查到的号.txt
type 查到的号.txt| clip
作者: ceii     时间: 2008-10-4 22:01
你的代码前面几行在我的机子运行不正常。
echo %ClipboardText% 不能得到 7777 。
看来问题不在于 findstr,而是前面赋值就已经不正常。
你能确定 echo %ClipboardText% 的输出是 7777 吗?
作者: ka56     时间: 2008-10-4 22:10


  Quote:
Originally posted by ceii at 2008-10-4 22:01:
你的代码前面几行在我的机子运行不正常。
echo %ClipboardText% 不能得到 7777 。
看来问题不在于 findstr,而是前面赋值就已经不正常。
你能确定 echo %ClipboardText% 的输出是 7777 吗?

先复制"7777",运行后%ClipboardText%的输出是"7777",前面的代码不会错的
作者: ceii     时间: 2008-10-4 22:18
找到原因了,%ClipboardText% 的值是 7777 加空格,
想办法去掉 7777 后面的空格就行了。
作者: ceii     时间: 2008-10-4 22:20
修改前面的代码,加上以下语句应该可以了吧。
set ClipboardText=%ClipboardText: =%
作者: ceii     时间: 2008-10-4 22:29
再看了一下,简单地把以下语句
for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a >nul 2>nul
改成
for /f "delims=" %%a in ('cscript //Nologo tmp.js') do @set ClipboardText=%%a>nul 2>nul
就行了。
作者: ka56     时间: 2008-10-4 22:44
非常感谢ceii兄!!已经搞定~~
可用的代码确定:
@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%
cd.>查到的号.txt
findstr /rc:"^ %ClipboardText%" 用来查找的号文档.txt>>查到的号.txt
for %%b in ("%ClipboardText% $") do findstr /r /c:%%b 用来查找的号文档.txt>>查到的号.txt
type 查到的号.txt| clip
pause
作者: ness     时间: 2008-10-4 22:54
这样不行吗
@echo off
findstr /rc:" 7777" 7777.txt>77.txt
findstr /rc:"7777 " 7777.txt>>77.txt
pause