从文件夹中的文件中捕获字符串

时间:2014-01-13 07:38:42

标签: windows batch-file

我想从存储在perticular文件夹中的一组.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

我不想在排除部分被拒绝之后排队。

---------- 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

表示我想要仅包含“REJECTED”的输出。如上图所示。

如何实现这个目标?

3 个答案:

答案 0 :(得分:1)

findstr /m /i  "REJECTED" C:\Users\SBA\Desktop\CBS\OUTBOX\*

/i仅在不区分大小写时才需要 - 如果这是您想要的。

答案 1 :(得分:0)

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  "REJECTED" "C:\Users\SBA\Desktop\CBS\OUTBOX\*"
findstr  "REJECTED" "C:\Users\SBA\Desktop\CBS\PROCESSED\*"

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

findstr /M "REJECTED" "C:\Users\SBA\Desktop\CBS\OUTBOX\*"

答案 2 :(得分:0)

type "C:\Users\SBA\Desktop\CBS\OUTBOX\*" 2>nul | find "REJECTED"

只有一个type命令可以读取所有文件,只将其发送到一个过滤行的find进程。没有文件名,也没有附加行。

已编辑以适应评论

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

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"