标题: [文本处理] [已解决]批处理怎样查找文本的路径?【更新】 [打印本页]
作者: 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. 直接打开搜索到文本- @echo off
- set /p str=Please input the string:
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
- )
复制代码
ii. 搜索到文本后直接打开文本当前路径- @echo off
- set /p str=Please input the string:
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && start "" "%%~dpi"
- )
复制代码
iii. 搜索到文本后直接打开文本的上一级路径- @echo off
- set /p str=Please input the string:
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && for %%j in ("%%~dpi\..") do (start "" "%%~fsj")
- )
复制代码
iv. 搜索到文本后直接打开本文的上上级路径- @echo off
- set /p str=Please input the string:
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && for %%j in ("%%~dpi\..\..") do (start "" "%%~fsj")
- )
复制代码
作者: lvsehuaxue 时间: 2011-8-23 08:19
- @echo off
- for /f "delims=" %%i in ('findstr /s /m "ABC123" c:\test.txt') do (
- start "" "%%i"
- )
- pause
复制代码
作者: 545810831 时间: 2011-8-23 09:48
时间会有点长,因为要查找整个c盘:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('cd /d c:\^&dir /s /b test.txt') do (
- findstr /i "ABCD123" "%%i"&&set a=%%i
- echo !a!
- call !a!
- )
- pause
复制代码
作者: Hello123World 时间: 2011-8-23 13:12
- @echo off&SetLocal EnableDelayedExpansion
- ::有空格的路径给其加上双引号
- For %%i in ("C:\test 2\test.txt" c:\1_temp\test.txt c:\2\3\test.txt) do (
- For /f "delims=" %%j in ('findstr /i /m "ABC123" "%%~fi"') do (
- echo %%j
- start "" "%%j"
- )
- )
- 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 编辑
根据大家的建议,现脚本修成如下这样,执行不了,还是有问题,请高手指点~- @echo off
- setlocal enabledelayedexpansion
- echo.
- echo Please input the string:
- set /p str=
- for %%i in ('dir /s /b test.txt') do (
- for /f "delims=" %%j in (`findstr /I /M "%str%" '%%i'`) do (
- echo %%j
- start "" "%%j"
- )
- )
- pause
复制代码
作者: CUer 时间: 2011-8-23 19:31
- @echo off
- set /p str=Please input the string:
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && (echo %%i & start "" "%%i")
- )
- pause
复制代码
作者: xudaweb 时间: 2011-8-23 19:48
回复 7# CUer - 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 - @echo off
- set /p str=Please input the string:
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && start "" "%%~dpi"
- )
复制代码
作者: 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 编辑
- 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 编辑
- set /p str=Please input the string.
- for /f "delims=" %%i in ('dir /s /b test.txt') do (
- findstr /i /c:"%str%" "%%i" && for %%j in ("%%~dpi\..") do (start "" "%%~nxj")
- )
复制代码
还是直接贴上代码,经各位大侠指点又拜读旧帖,还是有点问题:
执行代码大多数文件的上一级路径都能直接打开,路径中有一个文件夹名是ww01.7_7_d1_dps&cb
系统提示打不开(此文件夹为客户不知哪位脑残人士命名的),猜测是因为.或者&在作怪,可是实在改不了了,请高手指正!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |