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

[文本处理] [已解决]批处理怎样查找文本的路径?【更新】

本帖最后由 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. )
复制代码
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

时间会有点长,因为要查找整个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  
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

  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
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

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

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

不过问题还未解决...

TOP

本帖最后由 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
复制代码

TOP

  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
复制代码

TOP

回复 7# CUer
  1.   findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
复制代码
你这句句法不对吧?

TOP

回复 8# xudaweb


报错信息是什么?

TOP

回复 9# CUer

CUer你好,脚本可以执行,就是最后打开的是含有字符串的文件,而不是文件所在的完整路径。

TOP

回复 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. )
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 11# CUer

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

"%%~dpi" 这个参数详细说明哪里能查到?想搞个究竟...

TOP

回复 12# xudaweb


    for /? 系统帮助的最后一部分可以找到,在 call /? 里也可以找到

TOP

再次感谢各位帮助我的大侠!还得多学啊,懂的太少了...

TOP

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

TOP

返回列表