[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

本帖最后由 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
系统提示打不开(此文件夹为客户不知哪位脑残人士命名的),猜测是因为.或者&在作怪,可是实在改不了了,请高手指正!!!

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

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

TOP

回复 12# xudaweb


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

TOP

回复 11# CUer

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

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

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

回复 9# CUer

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

TOP

回复 8# xudaweb


报错信息是什么?

TOP

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

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

本帖最后由 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

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

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

不过问题还未解决...

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

返回列表