标题: [文本处理] [已解决]如何使用BAT查找一个文件夹中是否存在指定开头的文件? [打印本页]
作者: chuyizhou 时间: 2014-1-8 13:25 标题: [已解决]如何使用BAT查找一个文件夹中是否存在指定开头的文件?
本帖最后由 chuyizhou 于 2014-1-13 13:56 编辑
大家好,
刚开始自学批处理,第一次发贴希望大家多多包涵。
我想使用bat实现一种功能,它能在指定的目录下查找由A.txt文件内包含的字符开头的文件,并且按照一定的格式输出。以下是我的一些逻辑,如果有不合适的地方请多多指教,谢谢!
Files list in folder: K:\x\y\z\
a1b1.txt
a1b2.txt
a2b1.txt
a2b2.txt
a3b.txt
A.txt的内容:
a1
a2
a4
若拿A.txt文件的内容去比较目标文件夹下面的文件,以下是期望的输出:
a1 --> a1b1.txt, a1b2.txt
a2 --> a2b1.txt, a2b2.txt
a4 --> null
然后因为a3b.txt在A.txt中没有参照,所以把它放到B.txt文件中。
因为工作需要,刚开始自学批处理,所以暂且把需求放上来希望可以得到解决。同时我也会用空闲的时间自学希望可以靠自己解决。
谢谢!
作者: terse 时间: 2014-1-8 15:52
本帖最后由 terse 于 2014-1-10 13:28 编辑
效率不理想- @echo off&setlocal enabledelayedexpansion
- >$ dir /b /a-d K:\x\y\z\*.*
- for /f "delims=" %%i in (a.txt) do (
- set "str="
- for /f "tokens=*" %%j in ('findstr /ibc:"%%i"') do set str=!str!,%%j
- if defined str (echo %%i --^> !str:~1!) else echo %%i --^> Null
- )
- >b.txt findstr /ivbg:a.txt $
- del $
- pause
复制代码
作者: cjiabing 时间: 2014-1-9 10:42
您的意思是指:指定一个搜索名称列表,并以此进行搜索?
作者: chuyizhou 时间: 2014-1-9 10:54
回复 3# cjiabing
感谢您的回复! 是的,一个文件存的是一个列表,针对这个列表里的各个字搜索一个文件夹中是否有对应的文件。不知道又没有这样的可能性?
作者: chuyizhou 时间: 2014-1-9 11:18
回复 2# terse
谢谢帮助!经过测试我得到了以下输出和文件的变动
cmd.exe的输出是:
The system cannot find the file 'findstr /ibc:"a1".
a1 --> Null
The system cannot find the file 'findstr /ibc:"a2".
a2 --> Null
The system cannot find the file 'findstr /ibc:"a4".
a4 --> Null
FINDSTR: Cannot read strings from a.txt
Press any key to continue . . .
检查a.txt文件发现其中的内容被删除,b.txt文件中没有内容。
请问您的代码中对a.txt和b.txt文件的存放位置有要求吗?是否和.bat文件在同一个目录下就可以了呢?
请不吝赐教!谢谢!
作者: terse 时间: 2014-1-9 14:47
回复 5# chuyizhou
代码不对A.txt文件作任何修改 所以a.txt应该是无改动的
另 for /f "tokens=*" %%j in ('findstr /ibc:"%%i" ) do set str=!str!,%%j
括号里应该这样 'findstr /ibc:"%%i"' 后面 似乎漏掉一个"'" 你检查一下再试
作者: cjiabing 时间: 2014-1-9 15:59
- @echo off
- for /f "" %%i in (a.txt) do (
- set /p= %%i --^> <nul
- for /f "tokens=4" %%a in ('dir /a *.txt^|findstr /ir "%%i"') do set /p= %%a, <nul
- echo;
- )
- pause
-
- for /f "tokens=4" %%a in ('dir /a *.txt^|findstr /irg:a.txt') do echo %%a
- pause
复制代码
作者: chuyizhou 时间: 2014-1-10 09:39
回复 7# cjiabing
不好意思,我比较初级,似乎在代码里没有定义目标文件夹 K:\x\y\z,请问加在哪个循环里好呢?谢谢帮助!
作者: chuyizhou 时间: 2014-1-10 09:41
回复 6# terse
加了"'"之后cmd.exe里什么都没有运行。请问这是什么原因?
作者: terse 时间: 2014-1-10 13:24
回复 9# chuyizhou
我这里测试正常
换个浏览器编辑下 (另:2楼重新编辑了)
检查代码第5行 是否一致- for /f "tokens=*" %%j in ('findstr /ibc:"%%i"') do set str=!str!,%%j
复制代码
作者: cjiabing 时间: 2014-1-11 00:26
回复 8# chuyizhou
直接放在这个文件夹里运行就可以了!
作者: chuyizhou 时间: 2014-1-13 13:53
回复 11# cjiabing
谢谢!我改成tokens=5就好用了。可能是环境不一样我这儿dir出来文件名是第五块!非常感谢!
作者: chuyizhou 时间: 2014-1-13 13:54
回复 10# terse
谢谢你哦!结合您和斑竹的代码最后有了我满意的coding。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |