批处理文件,搜索文件夹中的所有文件,然后排序

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合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等

photoshop动作批处理图片问题

批处理如何在指定文件夹内搜索某个关键字,包含这个关键字的文件或文件夹要删除?

如何对 Windows 10 批处理文件中的参数列表进行排序