Board logo

标题: [文本处理] [已解决]批处理怎样查找文本的路径?【更新】 [打印本页]

作者: xudaweb    时间: 2011-8-23 03:07     标题: [已解决]批处理怎样查找文本的路径?【更新】

本帖最后由 xudaweb 于 2011-8-28 09:34 编辑

问题描述:
1. 路径不同的文件夹内含有相同的文本test.txt, 如:
    C:\test 2\test.txt,   c:\1_temp\test.txt,    c:\2\3\test.txt 等很多个同名的文本...
2. 在所有的test.txt中查找指定的字符串string:  "ABC123"
3. 如果查找到字符串,则反馈查找到字符的文本的完整路径(最好能直接打开其路径)。

本人新人,折腾了好久,没有任何进展,遇到的问题:
a, 用for无法指定不同路径下test.txt
b, 用find查找后,文本的路径截取不出来
c, 无法直接打开其路径

试了好多终于试出来了,现做如下更新,希望能给跟我同样困惑的人一点点帮助。
i. 直接打开搜索到文本
  1. @echo off
  2. set /p str=Please input the string:
  3. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  4.     findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
  5. )
复制代码
ii. 搜索到文本后直接打开文本当前路径
  1. @echo off
  2. set /p str=Please input the string:
  3. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  4.     findstr /i /c:"%str%" "%%i" && start "" "%%~dpi"
  5. )
复制代码
iii. 搜索到文本后直接打开文本的上一级路径
  1. @echo off
  2. set /p str=Please input the string:
  3. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  4.     findstr /i /c:"%str%" "%%i" && for %%j in ("%%~dpi\..") do (start "" "%%~fsj")
  5. )
复制代码
iv. 搜索到文本后直接打开本文的上上级路径
  1. @echo off
  2. set /p str=Please input the string:
  3. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  4.     findstr /i /c:"%str%" "%%i" && for %%j in ("%%~dpi\..\..") do (start "" "%%~fsj")
  5. )
复制代码

作者: lvsehuaxue    时间: 2011-8-23 08:19

  1. @echo off
  2. for /f "delims=" %%i in ('findstr /s /m "ABC123" c:\test.txt') do (
  3.    start "" "%%i"
  4. )
  5. pause
复制代码

作者: 545810831    时间: 2011-8-23 09:48

时间会有点长,因为要查找整个c盘:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims="  %%i in ('cd /d c:\^&dir /s /b  test.txt') do (
  4. findstr /i "ABCD123" "%%i"&&set a=%%i
  5. echo !a!
  6. call !a!
  7. )
  8. pause  
复制代码

作者: Hello123World    时间: 2011-8-23 13:12

  1. @echo off&SetLocal EnableDelayedExpansion
  2. ::有空格的路径给其加上双引号
  3. For %%i in ("C:\test 2\test.txt" c:\1_temp\test.txt  c:\2\3\test.txt) do (
  4. For /f "delims=" %%j in ('findstr /i /m "ABC123" "%%~fi"') do (
  5. echo %%j
  6. start "" "%%j"
  7. )
  8. )
  9. pause>nul
复制代码

作者: xudaweb    时间: 2011-8-23 17:59

本帖最后由 xudaweb 于 2011-8-23 18:11 编辑

第一次发帖就有好心人热心帮忙,心里暖暖的,说明批处理之家有大家一起探讨的氛围啊~赞。。。

不过问题还未解决...
作者: xudaweb    时间: 2011-8-23 18:08

本帖最后由 xudaweb 于 2011-8-23 18:09 编辑

根据大家的建议,现脚本修成如下这样,执行不了,还是有问题,请高手指点~
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo.
  4. echo Please input the string:
  5. set /p str=
  6. for %%i in ('dir /s /b  test.txt') do (
  7.      for /f "delims=" %%j in (`findstr /I /M "%str%" '%%i'`) do (
  8. echo %%j
  9. start "" "%%j"
  10. )
  11. )
  12. pause
复制代码

作者: CUer    时间: 2011-8-23 19:31

  1. @echo off
  2. set /p str=Please input the string:
  3. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  4.     findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
  5. )
  6. pause
复制代码

作者: xudaweb    时间: 2011-8-23 19:48

回复 7# CUer
  1.   findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
复制代码
你这句句法不对吧?
作者: CUer    时间: 2011-8-23 20:31

回复 8# xudaweb


报错信息是什么?
作者: xudaweb    时间: 2011-8-23 20:46

回复 9# CUer

CUer你好,脚本可以执行,就是最后打开的是含有字符串的文件,而不是文件所在的完整路径。
作者: CUer    时间: 2011-8-23 20:51

回复 10# xudaweb
  1. @echo off
  2. set /p str=Please input the string:
  3. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  4.     findstr /i /c:"%str%" "%%i" && start "" "%%~dpi"
  5. )
复制代码

作者: xudaweb    时间: 2011-8-23 21:10

回复 11# CUer

谢谢你,问题已经解决了,再次感谢你的帮助!

"%%~dpi" 这个参数详细说明哪里能查到?想搞个究竟...
作者: CrLf    时间: 2011-8-23 22:04

回复 12# xudaweb


    for /? 系统帮助的最后一部分可以找到,在 call /? 里也可以找到
作者: xudaweb    时间: 2011-8-24 00:48

再次感谢各位帮助我的大侠!还得多学啊,懂的太少了...
作者: xudaweb    时间: 2011-8-24 00:53

本帖最后由 xudaweb 于 2011-8-25 21:23 编辑
  1.     findstr /i /c:"%str%" "%%i" && start "" "%%~dpi"
复制代码
%%~dpi代表的是当前文件的路径,我像举一反三下,如果想得到上一级路径,或者上上一级路径呢?
哪位高手给我指点迷津?
作者: Batcher    时间: 2011-8-25 22:53

回复 15# xudaweb


参考:
http://bbs.bathome.net/thread-3516-1-1.html
作者: xudaweb    时间: 2011-8-25 23:45

本帖最后由 xudaweb 于 2011-8-26 14:56 编辑
  1. set /p str=Please input the string.
  2. for /f "delims=" %%i in ('dir /s /b test.txt') do (
  3.     findstr /i /c:"%str%" "%%i" && for %%j in ("%%~dpi\..") do (start "" "%%~nxj")
  4. )
复制代码
还是直接贴上代码,经各位大侠指点又拜读旧帖,还是有点问题:
执行代码大多数文件的上一级路径都能直接打开,路径中有一个文件夹名是ww01.7_7_d1_dps&cb
系统提示打不开(此文件夹为客户不知哪位脑残人士命名的),猜测是因为.或者&在作怪,可是实在改不了了,请高手指正!!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2