[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]findstr中的正则表达式是标准的正则表达式吗?

我有一批处理,内容如下:
  1. @echo off
  2. for /f "delims=" %%a in ('find /i ":" TM2008.lnk ^| findstr /i "^[a-z]:"') do echo %%a
  3. echo.&pause
复制代码
运行后结果为:
  1. L:・
  2. L:・
  3. L:ァ
  4. L:ァ
  5. L:・
  6. C:\Program Files\Tencent\TM2008\Bin\TM.exe
  7. 続行するには何かキーを押してください . . .
复制代码
,但如果将原来的批处理作一下改动
findstr /i "^[a-z]:"  ---->  findstr /i "^[a-z]:\\"
就一个结果也得不到,我认为应该可以找到C:\的阿,请教知道的朋友,
帮忙看看是怎么回事,谢谢

[ 本帖最后由 sniperhgy 于 2009-6-24 13:05 编辑 ]
1

评分人数

回复 1楼 的帖子

  1. @echo off
  2. for /f "delims=" %%a in ('find /i ":" a.txt ^| findstr /i "^[a-z]:\\."') do echo %%a
  3. echo.&pause
复制代码
(*^_^*)

TOP

如果是获取 .lnk 的目标路径,可以这样:
  1. @echo off
  2. for /f "skip=3 delims=" %%a in ('find ":\" TM2008.lnk') do echo %%a
  3. pause
复制代码

TOP

echo 1\2|findstr "\\"                ok
echo 1\2|findstr "1\\"                ok
echo 1\2|findstr "1\\2"                ok
echo 1\2|findstr "1\\\\"        ok
echo 1\2|findstr "1\\\\2"        error
echo 1\2|findstr "^1\\"                error,注意上面不加^时ok
echo 1\2|findstr "^1\\\\"        ok
echo 1\2|findstr "^1\\\\2"        error
echo 1\2|findstr "^1\\2"        ok
echo 1\2|findstr "^1\\."        ok
echo 1\|findstr "^1\\."                error
echo 1\|findstr "^1\\\\"        ok

看来要查找的字符串含有\时,如果目标字符串的\后面还有内容,则搜索字符串\除了要变成\\(本身的转义要求),它后面需要再加一个字符;或者不加字符,但把\变成\\\\。

再次领悟到findstr问题真不少。BS微软的缩水。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

echo 1\2|findstr /b "1\\"
用开关 /b 和用^有区别。
技术问题请到论坛发帖求助!

TOP

双引号也会影响

echo 1\2 | findstr ^^1\\2

[ 本帖最后由 tireless 于 2009-6-24 12:15 编辑 ]

TOP

3楼说的是将搜索字符串放在引号中的情况。

双引号是有影响,但楼上那个例子不能说明,只是预处理的要求(^转义)。
这样比较:
echo 1\2|findstr "^1\\\\"
echo 1\2|findstr ^^1\\\\

[ 本帖最后由 zqz0012005 于 2009-6-24 12:32 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

谢谢几位朋友的回答 ^_^

[ 本帖最后由 sniperhgy 于 2009-6-24 13:07 编辑 ]

TOP

返回列表