[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]如何使用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文件中。

因为工作需要,刚开始自学批处理,所以暂且把需求放上来希望可以得到解决。同时我也会用空闲的时间自学希望可以靠自己解决。

谢谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 terse 于 2014-1-10 13:28 编辑

效率不理想
  1. @echo off&setlocal enabledelayedexpansion
  2. >$ dir /b /a-d K:\x\y\z\*.*
  3. for /f "delims=" %%i in (a.txt) do (
  4.     set "str="
  5.     for /f "tokens=*" %%j in ('findstr /ibc:"%%i"') do set str=!str!,%%j
  6.     if defined str (echo %%i  --^> !str:~1!) else echo %%i  --^> Null
  7. )
  8. >b.txt findstr /ivbg:a.txt $
  9. del $
  10. pause
复制代码
1

评分人数

TOP

您的意思是指:指定一个搜索名称列表,并以此进行搜索?
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 3# cjiabing


   感谢您的回复! 是的,一个文件存的是一个列表,针对这个列表里的各个字搜索一个文件夹中是否有对应的文件。不知道又没有这样的可能性?

TOP

回复 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文件在同一个目录下就可以了呢?
请不吝赐教!谢谢!

TOP

回复 5# chuyizhou
代码不对A.txt文件作任何修改 所以a.txt应该是无改动的
另 for /f "tokens=*" %%j in ('findstr /ibc:"%%i" ) do set str=!str!,%%j
括号里应该这样 'findstr /ibc:"%%i"'  后面 似乎漏掉一个"'" 你检查一下再试

TOP

  1. @echo off
  2. for /f "" %%i in (a.txt) do (
  3. set /p= %%i --^> <nul
  4. for /f "tokens=4" %%a in ('dir /a *.txt^|findstr /ir "%%i"') do set /p= %%a, <nul
  5. echo;
  6. )
  7. pause
  8. for /f "tokens=4" %%a in ('dir /a *.txt^|findstr /irg:a.txt') do echo %%a
  9. pause
复制代码
1

评分人数

寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 7# cjiabing


    不好意思,我比较初级,似乎在代码里没有定义目标文件夹 K:\x\y\z,请问加在哪个循环里好呢?谢谢帮助!
白天不懂夜的黑,没用过bat不知道bat的猛。

TOP

回复 6# terse


    加了"'"之后cmd.exe里什么都没有运行。请问这是什么原因?
白天不懂夜的黑,没用过bat不知道bat的猛。

TOP

回复 9# chuyizhou
我这里测试正常
换个浏览器编辑下 (另:2楼重新编辑了)

检查代码第5行 是否一致
  1. for /f "tokens=*" %%j in ('findstr /ibc:"%%i"') do set str=!str!,%%j
复制代码

TOP

回复 8# chuyizhou


    直接放在这个文件夹里运行就可以了!
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 11# cjiabing


    谢谢!我改成tokens=5就好用了。可能是环境不一样我这儿dir出来文件名是第五块!非常感谢!
白天不懂夜的黑,没用过bat不知道bat的猛。

TOP

回复 10# terse


    谢谢你哦!结合您和斑竹的代码最后有了我满意的coding。
白天不懂夜的黑,没用过bat不知道bat的猛。

TOP

返回列表