Windows 从文件夹中存储的文件捕获字符串

Windows 从文件夹中存储的文件捕获字符串,windows,batch-file,Windows,Batch File,我想从存储在pertical文件夹中的一组.dat文件中捕获包含单词“REJECTED”的字符串。我正在使用下面的find命令 find "REJECTED" C:\Users\SBA\Desktop\CBS\OUTBOX\* 但它正在生成如下所示的输出 ---------- C:\USERS\SBA\DESKTOP\CBS\OUTBOX\PRF_FES_ACCTBTCH_11012014_47.DAT 2DR0089 C40291100002100000000628780011/01

我想从存储在pertical文件夹中的一组.dat文件中捕获包含单词“REJECTED”的字符串。我正在使用下面的find命令

find  "REJECTED" C:\Users\SBA\Desktop\CBS\OUTBOX\*
但它正在生成如下所示的输出

---------- C:\USERS\SBA\DESKTOP\CBS\OUTBOX\PRF_FES_ACCTBTCH_11012014_47.DAT
2DR0089    C40291100002100000000628780011/01/145070A0158230-R/                         A0158230-RINR                                                                                                                                                       01  9545                                                            5070  00 BATCH REJECTED
2CR0089    G39000000033900000000628780011/01/145070A0158230-R/                         A0158230-RINR                                                                                                                                                       01  9545                                                            5070  00 BATCH REJECTED

---------- C:\USERS\SBA\DESKTOP\CBS\OUTBOX\PRF_FES_ACCTBTCH_11012014_48.DAT

---------- C:\USERS\SBA\DESKTOP\CBS\OUTBOX\PRF_FES_ACCTBTCH_11012014_49.DAT

---------- C:\USERS\SBA\DESKTOP\CBS\OUTBOX\PRF_FES_ACCTBTCH_11012014_50.DAT
我不想线后,从outpot被拒绝的部分

---------- C:\USERS\SBA\DESKTOP\CBS\OUTBOX\PRF_FES_ACCTBTCH_11012014_47.DAT
2DR0089    C40291100002100000000628780011/01/145070A0158230-R/                         A0158230-RINR                                                                                                                                                       01  9545                                                            5070  00 BATCH REJECTED
2CR0089    G39000000033900000000628780011/01/145070A0158230-R/                         A0158230-RINR                                                                                                                                                       01  9545                                                            5070  00 BATCH REJECTED
表示我想要只包含“已拒绝”的输出。如上所示

如何做到这一点

for %i in ("C:\Users\SBA\Desktop\CBS\OUTBOX\*") do @findstr "REJECTED" %i
要在批处理文件中使用,请使用

for %%i in ("C:\Users\SBA\Desktop\CBS\OUTBOX\*") do findstr "REJECTED" %%i
编辑: 如果希望包含文件名,则更简单:

findstr  "REJECTED" "C:\Users\SBA\Desktop\CBS\OUTBOX\*"
要在两个目录中搜索,请使用
findstr
两次(如果未找到任何内容,则不会生成输出)

如果只需要包含字符串的文件名,请使用

findstr /M "REJECTED" "C:\Users\SBA\Desktop\CBS\OUTBOX\*"
只有一个
键入
命令来读取所有文件,只将其发送到一个
查找
过程,过滤行。没有文件名,也没有其他行

编辑以适应评论

如果文件有时在一个文件夹中,有时在另一个文件夹中,最好的选择是尝试
键入最常用文件夹中的文件,如果命令无法找到指定的文件,则在第二个文件夹中键入文件(包括变量声明以缩短代码行)


/i
仅适用于不区分大小写的情况-如果您需要的话。

使用
findstr
而不是
find
(使用相同的语法)。唯一的缺点:当你使用通配符时,它会将文件名放在找到的字符串之前谢谢你的回复,键入“C:\Users\SBA\Desktop\CBS\OUTBOX*”2>nul | find“REJECTED”这对我来说很有效。我们可以这样修改吗?如果文件(4)不在提及文件夹“C:\Users\SBA\Desktop\CBS\OUTBOX\”中,那么这些文件将位于“C:\Users\SBA\Desktop\CBS\PROCESSED\”文件夹中。我们如何在上面提到的senario中搜索相同的内容。@user3164140:“如果文件(4)不存在”,这是否意味着它不会是文件夹中的任何传统文件?或者有更多的文件,但只有4.dat文件?具体情况是什么?@user3164140:查看编辑的答案是否适合您的情况这不会列出包含匹配行的文件名
findstr /M "REJECTED" "C:\Users\SBA\Desktop\CBS\OUTBOX\*"
type "C:\Users\SBA\Desktop\CBS\OUTBOX\*" 2>nul | find "REJECTED"
set "folder=C:\Users\SBA\Desktop\CBS"
set "files=PRF_FES_ACCTBTCH_????????_*.dat"

(type "%folder%\OUTBOX\%files%" || type "%folder%\PROCESSED\%files%") 2>nul | find "REJECTED"
findstr /m /i  "REJECTED" C:\Users\SBA\Desktop\CBS\OUTBOX\*