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

Batch file 批处理文件,搜索文件夹中的所有文件,然后排序,batch-file,find,Batch File,Find,我以前做过一些小批量文件,但从未做过任何需要在文件夹中读取文件名的事情 我需要一个批处理文件,可以为我排序的文件夹 我需要它查看一个文件夹,搜索每个文本文件,如果它包含一个“字符串”,然后移动到一个接受的文件夹,如果没有,移动到一个拒绝的文件夹 有没有办法解决这个问题 我以前在查找文本时使用了以下内容 find /c "string" file if %errorlevel% equ 1 goto 我不知道如何让它搜索文件夹中的每个文件,而这些文件名每天都在变化 在您的问题陈述中,您说所有这些

我以前做过一些小批量文件,但从未做过任何需要在文件夹中读取文件名的事情

我需要一个批处理文件,可以为我排序的文件夹

我需要它查看一个文件夹,搜索每个文本文件,如果它包含一个“字符串”,然后移动到一个接受的文件夹,如果没有,移动到一个拒绝的文件夹

有没有办法解决这个问题

我以前在查找文本时使用了以下内容

find /c "string" file
if %errorlevel% equ 1 goto

我不知道如何让它搜索文件夹中的每个文件,而这些文件名每天都在变化

在您的问题陈述中,您说所有这些文件都是
.txt
文件。因此,我建议使用
for循环
循环目录中的每个
.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; 但是每个%%a in DO()子句都应该用引号括起来。如果“string”包含空格,则还必须使用FINDSTR/C选项。@dbenham我在原始答案中做了更改,以反映您提到的要点。(顺便说一句,我希望您意识到我使用了从您那里学到的nul字符串输出(带%%and | |),谢谢。)您的回答几乎是正确的。我修复了/C选项的格式-
/C:“string”
。感谢您的帮助!我最后使用了:“FOR%%a in(.xml)do(findstr/I”。*e202..*l202.*.e203.*.e204.*.e201.*%a>nul和move%%a“C:\xmlcimport”>>C:\copyxml\log.txt | move%%a“C:\copyxml\rejected”>>C:\copyxml\log.txt)这使我能够移动包含e202、e203、e204或e201的每个xml文件,并将其放在xmlimport文件夹中,其余文件则放在被拒绝的文件夹中。输出也会转到日志文件,但没有太大帮助,因为它没有显示移动到哪里的文件。