【问题标题】:Batch/vbs to read a text file批处理/vbs 读取文本文件
【发布时间】:2023-08-09 17:37:01
【问题描述】:

我想编写一个批处理脚本/vbs,它应该逐行读取文本文件并搜索关键字。如果找到关键字,它应该重定向到输出文件。

示例日志如下,

2000 年 1 月 9 日星期二 下午 06:53
--------C:\数据--------
C:\数据\2009
C:\数据\2010
C:\数据\2011
C:\数据\文件名.txt
C:\Data\Fileusage
C:\Data\Guidline.xml
C:\数据\2009\12
C:\Data\2009\12\01\667e33999.txt
C:\Data\2009\12\01\667e45454999.xml
C:\Data\2009\12\09\667dfder999.pdf
C:\Data\2009\12\09\667e332324.pdf
C:\Data\2009\12\09\867fdfe2323.pdf
C:\Resource\Findings\233.txt
C:\Resource\Findings\234.txt
C:\Resource\Findings\235.txt
C:\Resource\Findings\236.txt
C:\Resource\Findings\237.txt
C:\Resource\Findings\238.txt
C:\Resource\Findings\Lasted\433.txt
C:\Resource\Findings\Lasted\239.txt
C:\Resource\Findings\Lasted\890.txt
C:\Resource\Findings\Lasted\121.txt
C:\Resource\Findings\Lasted\009.txt
C:\Resource\Findings\Lasted\999.txt
列出的文件总数:
12 个文件 7,234,336 字节
0 Dir(s) 3,413,392,345 字节空闲

基本上我想捕获以 C:\Data\Year\Month 和 C:\Resource\Findings\Lasted 开头的任何行

输出如下

C:\Data\2009\12\01\667e33999.txt
C:\Data\2009\12\01\667e45454999.xml
C:\Data\2009\12\09\667dfder999.pdf
C:\Data\2009\12\09\667e332324.pdf
C:\Data\2009\12\09\867fdfe2323.pdf
C:\Resource\Findings\Lasted\433.txt
C:\Resource\Findings\Lasted\239.txt
C:\Resource\Findings\Lasted\890.txt
C:\Resource\Findings\Lasted\121.txt
C:\Resource\Findings\Lasted\009.txt
C:\Resource\Findings\Lasted\999.txt

谁能帮帮我?

【问题讨论】:

  • 您当前的代码是什么?阅读for /?cmd /?set /? 或查看dostips.com
  • @jeb:比这容易得多。

标签: vbscript batch-file wsh


【解决方案1】:

你可以使用findstr:

findstr /b /r "C:\\Resource\\Findings\\Lasted\\ C:\\Data\\[0-9][0-9][0-9][0-9]\\[0-9][0-9]\\." data.dump

findstr 用于过滤文件中的行,这就是我们在这里所做的。首先我们启用与/r 的正则表达式匹配。不要被欺骗,这些是非常非常少的正则表达式,它们时不时会中断,因此要正确处理它们可能会很棘手。 /b 用于匹配行首。然后有一个以空格分隔的要查找的内容列表,在本例中为C:\Resource\Findings\Lasted\C:\Data\Year\Month,其中年份为四位数字,月份为两位数字。

【讨论】:

  • 我也想findstr,但我认为它无法在regEx-Basic模式下搜索两个不同的字符串
  • 下面是我的批处理脚本。任何人都可以帮我修复它吗? @echo off > result & setlocal enabledelayedexpansion for /f "tokens=* delims=" %%i in ('dir/b file.txt') do ( findstr /b /r "C:\\Resource\\Findings\\已持续\\C:\\Data\[0-9][0-9][0-9][0-9]\[0-9][0-9]\\." >结果.txt)
  • @user:以正常方式提问(请提供更多信息)。通常会忽略恰好相关的随机答案上的随机 cmets(我现在也会这样做)。
最近更新 更多