找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 76297|回复: 16

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

[复制链接]
发表于 2011-8-23 03:07:54 | 显示全部楼层 |阅读模式
本帖最后由 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. )
复制代码

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-23 08:19:51 | 显示全部楼层

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

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-8-23 09:48:54 | 显示全部楼层
时间会有点长,因为要查找整个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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-8-23 13:12:13 | 显示全部楼层
  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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-8-23 17:59:02 | 显示全部楼层
本帖最后由 xudaweb 于 2011-8-23 18:11 编辑

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

不过问题还未解决...
 楼主| 发表于 2011-8-23 18:08:24 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2011-8-23 19:31:37 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2011-8-23 19:48:00 | 显示全部楼层
回复 7# CUer
  1.   findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
复制代码
你这句句法不对吧?
发表于 2011-8-23 20:31:22 | 显示全部楼层
回复 8# xudaweb


报错信息是什么?
 楼主| 发表于 2011-8-23 20:46:27 | 显示全部楼层
回复 9# CUer

CUer你好,脚本可以执行,就是最后打开的是含有字符串的文件,而不是文件所在的完整路径。
发表于 2011-8-23 20:51:17 | 显示全部楼层
回复 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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-8-23 21:10:40 | 显示全部楼层
回复 11# CUer

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

"%%~dpi" 这个参数详细说明哪里能查到?想搞个究竟...
发表于 2011-8-23 22:04:12 | 显示全部楼层
回复 12# xudaweb


    for /? 系统帮助的最后一部分可以找到,在 call /? 里也可以找到
 楼主| 发表于 2011-8-24 00:48:45 | 显示全部楼层
再次感谢各位帮助我的大侠!还得多学啊,懂的太少了...
 楼主| 发表于 2011-8-24 00:53:49 | 显示全部楼层
本帖最后由 xudaweb 于 2011-8-25 21:23 编辑
  1.     findstr /i /c:"%str%" "%%i" && start "" "%%~dpi"
复制代码
%%~dpi代表的是当前文件的路径,我像举一反三下,如果想得到上一级路径,或者上上一级路径呢?
哪位高手给我指点迷津?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:17 , Processed in 0.037676 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表