批处理,查找哪些目录下的文件中含有相应的字符串
昨晚提问过,不知道为什么问题失效了。再问一遍,和第一次的需求有点变化,求高手写个能执行的bat文件。谢谢!我尝试写了一个bat如下:for/f"delims="%%iin...
昨晚提问过,不知道为什么问题失效了。再问一遍,和第一次的需求有点变化,求高手写个能执行的bat文件。谢谢!
我尝试写了一个bat如下:
for /f "delims= " %%i in (source.txt) do (echo %%i && findstr /S /M "%%i" *.stk) >>./results.txt
pause
但是没有达到我的要求,我想在取source.txt中的每一行,然后在当前目录下的子目录中(可能有多级子目录)查找哪个stk文件中含有这一行,我只需要把子目录的名字记录下来,并输入到result.txt中。但是我自己写的命令是把所有含有这个字符串的stk文件都找到了,其实我不需要文件,只要他所在的目录就行。请高手帮忙写个批处理谢谢!
这是source.txt的内容:
bsgap_r1.nrm
ranap951.nrm
运行我的命令后,得到:
bsgap_r1.nrm
12.2\stacks\ip\ip_appl_1090.stk
12.2\stacks\ip\ip_appl_isa.stk
12.2\stacks\ip\ip_appl_isa_1059.stk
12.2\stacks\ip\ip_appl_isa_1090.stk
13.1\stacks\ip\ip_appl.stk
13.1\stacks\ip\ip_appl_1090.stk
13.1\stacks\ip\ip_appl_isa.stk
13.1\stacks\ip\ip_appl_isa_1059.stk
ranap951.nrm
11.3\stacks\ip\ip_appl.stk
11.3\stacks\ip\ip_appl_1059.stk
11.3\stacks\ip\ip_appl_1090.stk
11.3\stacks\ip\ip_appl_1264.stk
11.3\stacks\ip\ip_appl_1293.stk
其实我只想要:
bsgap_r1.nrm :
12.2\stacks\ip
13.1\stacks\ip
ranap951.nrm:
11.3\stacks\ip 展开
我尝试写了一个bat如下:
for /f "delims= " %%i in (source.txt) do (echo %%i && findstr /S /M "%%i" *.stk) >>./results.txt
pause
但是没有达到我的要求,我想在取source.txt中的每一行,然后在当前目录下的子目录中(可能有多级子目录)查找哪个stk文件中含有这一行,我只需要把子目录的名字记录下来,并输入到result.txt中。但是我自己写的命令是把所有含有这个字符串的stk文件都找到了,其实我不需要文件,只要他所在的目录就行。请高手帮忙写个批处理谢谢!
这是source.txt的内容:
bsgap_r1.nrm
ranap951.nrm
运行我的命令后,得到:
bsgap_r1.nrm
12.2\stacks\ip\ip_appl_1090.stk
12.2\stacks\ip\ip_appl_isa.stk
12.2\stacks\ip\ip_appl_isa_1059.stk
12.2\stacks\ip\ip_appl_isa_1090.stk
13.1\stacks\ip\ip_appl.stk
13.1\stacks\ip\ip_appl_1090.stk
13.1\stacks\ip\ip_appl_isa.stk
13.1\stacks\ip\ip_appl_isa_1059.stk
ranap951.nrm
11.3\stacks\ip\ip_appl.stk
11.3\stacks\ip\ip_appl_1059.stk
11.3\stacks\ip\ip_appl_1090.stk
11.3\stacks\ip\ip_appl_1264.stk
11.3\stacks\ip\ip_appl_1293.stk
其实我只想要:
bsgap_r1.nrm :
12.2\stacks\ip
13.1\stacks\ip
ranap951.nrm:
11.3\stacks\ip 展开
2个回答
展开全部
两txt文件路径是照你原代码写的,自己注意路径是否对
@echo off
(for /r %%i in (*.stk)do (
findstr/g:"source.txt" "%%~i">nul&&echo %%~dpi)
)>"\results.txt"
pause
我猜还是需要文件名的,那就把代码中的%%~dpi改成%%i 如果确实只要目录,按上面代码如果找到多文件在同一目录就会有重复,需要的话再追问
@echo off
(for /r %%i in (*.stk)do (
findstr/g:"source.txt" "%%~i">nul&&echo %%~dpi)
)>"\results.txt"
pause
我猜还是需要文件名的,那就把代码中的%%~dpi改成%%i 如果确实只要目录,按上面代码如果找到多文件在同一目录就会有重复,需要的话再追问
更多追问追答
追问
结果不对!
我只要目录,不要重复的!只需要列出该字符串在哪些目录下出现过,就行了,就是下面的效果。你的命令输出了上千行,都是我不需要的东西。
bsgap_r1.nrm:
12.2\stacks\ip
13.1\stacks\ip
ranap951.nrm:
11.3\stacks\ip
追答
应该只是多显示了些( 从根目录起显示出来,且有重复),不至于都是没用的吧
好了给你重写一个去掉了重复的,屏幕上显示了文件名,而记录到文件的应该满足你的要求
@echo off&setlocal enabledelayedexpansion
set "f1=source.txt"
set "f2=results.txt"
set "cp=%~p0"
(for /f "usebackq delims=" %%i in ("%f1%")do (
if defined s echo/
echo %%i:
for /f "delims=" %%j in ('findstr/smc:"%%i" *.stk')do (
>con echo %%j
set "s=%%~pj"
set "s=!s:%cp%=!"
if defined s (set "s=!s:~,-1!")else set "s= 当前目录"
if not defined #!s! set #!s!=y&echo !s!
)))>"%f2%"
pause
展开全部
@echo off
for /f "delims= " %%i in (source.txt) do (
echo %%i : >> ./results.txt
for /f "delims=" %%a in ('findstr /S /M "%%i" *.stk) do if not defined %%i%%~dpa set %%i%%~dpa=1&&echo %%~dpa>>./results.txt
)
pause
只要你的source.txt中的内容没有空格,且子目录名也没有空格就可以。
更多追问追答
追问
谢谢,但是只输出了source.txt中的内容,如下:
bsgap_r1.nrm :
ranap951.nrm :
901-24011cp.upd1 :
执行第二个for时,出现了错误:The system cannot find the file 'findstr /S /M "bsgap_r1.nrm" *.stk.
追答
@echo off
for /f "delims= " %%i in (source.txt) do (
echo %%i : >> ./results.txt
for /f "delims=" %%a in ('findstr /S /M "%%i" *.stk') do if not defined %%i%%~dpa set %%i%%~dpa=1&&echo %%~dpa>>./results.txt
)
pause
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询