批处理文件,搜索文件夹中的所有文件,然后排序
Posted
技术标签:
【中文标题】批处理文件,搜索文件夹中的所有文件,然后排序【英文标题】:Batch File, search all files in folder, then sort 【发布时间】:2012-10-07 22:32:06 【问题描述】:我以前做过一些小批量文件,但从来没有在文件夹中读取任何需要文件名的文件。
我需要一个可以为我排序文件夹的批处理文件。
我需要它来查看一个文件夹,搜索每个文本文件,如果它包含一个“字符串”,那么将它移动到一个接受的文件夹中,如果没有,将它移动到一个被拒绝的文件夹中。
任何想法如何解决这个问题?
我之前使用过如下的东西来查找文本。
find /c "string" file
if %errorlevel% equ 1 goto
我不知道如何让它搜索文件夹中的每个文件,并且这些文件名每天都会更改。
【问题讨论】:
【参考方案1】:在您的问题陈述中,您说所有这些文件都是.txt
文件。所以我建议使用for loop
循环遍历目录中的每个.txt
文件,然后使用findstr
搜索预期的字符串。我在下面发布的代码将以这种方式工作。本质上,它将目录更改为桌面(或您的文件所在的任何位置),然后遍历每个 .txt
文件并搜索字符串。 findstr
输出被重定向到nul
(为了更快的处理),如果成功,.txt
文件被移动到C:\Users\Desktop\SuccessFolder
,否则这个文件被放置在C:\Users\Desktop\FailureFolder
。 (记住搜索"string"
,原始位置和2个文件夹位置仍然需要设置)我相信这段代码应该适用于你想要完成的工作。让我知道是否需要对代码进行任何更改 =]
@Echo off
cd /D C:\Users\Desktop
FOR %%a in (*.txt) do (
findstr /C:"string" "%%a" >nul && move "%%a" "C:\Users\Desktop\SuccessFolder" || move "%%a" "C:\Users\Desktop\FailureFolder")
【讨论】:
+1;但是 DO() 子句中的每个 %%a 都应该用引号引起来。如果“字符串”包含空格,也必须使用 FINDSTR /C 选项。 @dbenham 我对原始答案进行了更改,以反映您提出的观点。 (顺便说一句,我希望你意识到我使用了从你那里学到的字符串输出到 nul(使用 %% 和 ||),谢谢。) 你几乎猜对了。我修复了 /C 选项的格式 -/C:"string"
。
感谢您的帮助!我最终使用:“FOR %%a in (.xml) do (findstr /i ".*e202. .*l202.* .*e203.* .*e204.* .*e201 .*" %%a >nul && move %%a "C:\XMLImport" >> C:\copyxml\log.txt || move %%a "c:\copyxml\rejected" >> C:\copyxml\ log.txt)这使我可以移动每个包含 e202、e203、e204 或 e201 的 xml 文件并将其放在 xmlimport 文件夹中,其余文件放在被拒绝的文件夹中。输出也转到日志文件,但不是非常有帮助,因为它没有显示哪个文件被移动到了哪里。以上是关于批处理文件,搜索文件夹中的所有文件,然后排序的主要内容,如果未能解决你的问题,请参考以下文章
文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等