昨晚提问过,不知道为什么问题失效了。再问一遍,和第一次的需求有点变化,求高手写个能执行的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
结果不对!
我只要目录,不要重复的!只需要列出该字符串在哪些目录下出现过,就行了,就是下面的效果。你的命令输出了上千行,都是我不需要的东西。
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
多谢!!!!
基本差不多了,但是还有点小bug。
有些屏幕上看到输出了,但是生成的results.txt里却没有记录?
如下,屏幕上有显示:
stacks_13.1_170\stacks\UMTS_COMMON\UMTS_RRC_R9_NSN_ANSI_NSN_RU30.stk
stacks_13.1_170\stacks\UMTS_COMMON\UMTS_RRC_R9_NSN_NSN_RU30.stk
Press any key to continue . . .
但是:stacks_13.1_170\stacks\UMTS_COMMON 确在results.txt里面没有。
请帮忙再改一下,多谢多谢!!!
你这说的把我给难住了,要我说呢是不可能的,别的能正确记录下了,只这个不行,而它这里也没含任何特殊字符, 该不是内容太多看漏了吧...
如果 公子七哥 网友答的只要写入文本的格式认可的话,倒是省些事,你就采纳他的吧 我与他的代码本质上是一样的,只是我写的代码为了去掉文件目录上当前目录之前的部分才多费了周折
仔细对照了一下,不只少了这一个,丢失了好几个目录。但是这些目录和文件的信息都在运行窗口里显示了,就是没有写入results.txt里。我也找不出问题在哪里。我水平很差,没有理解你的脚本:-)
最好你能帮忙看一下,无论怎样,都非常感谢你。会把分给你的。
公子七哥的脚本不能运行。
又看了两次还是看不出什么原因
至于公子七哥代码 应该是变量名带有冒号符出错,前两%%~dpa改为%%~pa
@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
运行不了啊?闪了一下,啥都没有???
追答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%%~pa set %%i%%~pa=1&&echo,%%~dpa>>./results.txt
)
pause
复制之后检查下换行,有些浏览器和百度知道网页兼容不好,复制下来后可能会不一样。