【发布时间】:2011-04-03 20:50:54
【问题描述】:
我需要一个 Windows 批处理脚本文件来从目录中的所有文本文件中提取第三行并将它们输出到单独的文本文件中。谁能帮我写一个批处理文件来提取这些信息?我是这方面的初学者。谢谢!
【问题讨论】:
标签: windows text batch-file
我需要一个 Windows 批处理脚本文件来从目录中的所有文本文件中提取第三行并将它们输出到单独的文本文件中。谁能帮我写一个批处理文件来提取这些信息?我是这方面的初学者。谢谢!
【问题讨论】:
标签: windows text batch-file
这是可行的,但只有一个小技巧。
首先,你需要创建一个批处理文件thirdline.cmd:
@echo off
for /f "skip=2 delims=" %%i in (%1) do echo %%i & goto :EOF
然后,从命令行你会这样做:
for %i in (*.*) do @thirdline "%i"
如果您想从另一个批处理文件中执行此操作,您需要将上面的 %i 更改为 %%i(即它们出现在 thirdline.cmd 中)。
请记住将*.* 替换为与您要处理的文件匹配的文件掩码。
最后,上面给出的thirdline.cmd 只是将第三行输出到控制台。如果您想将其写入另一个文件(例如lines.txt),请将thirdline.cmd 更改为:
@echo off
for /f "skip=2 delims=" %%i in (%1) do >>lines.txt echo %%i & goto :EOF
【讨论】:
for %i in (*.*) do @thirdline "%i"(在%i 周围添加引号)
仅作为一种替代方法,这是另一种方法:
SETLOCAL
(FOR /L %%i IN (1,1,3) DO SET /P line=) < filename.txt
> another.txt ECHO %line%
ENDLOCAL
当你不能确定你要在你的脚本中引入的变量是否不会与已经存在的变量发生冲突时使用SETLOCAL & ENDLOCAL脚本,如果有的话。基本上,使用它们只是为了安全起见。 (感谢乔恩的建议!)
【讨论】:
SETLOCAL/ENDLOCAL.
SETLOCAL/ENDLOCAL 不是很熟悉,尽管我知道它们在理论上是干什么用的。我的意思是我不明白为什么在这里需要它们(或会带来任何改进)。他们可能有一些我不知道的微妙之处。 (或者可能是一些我看不到的相当基本的东西。)
line 变量覆盖或污染环境。
如果您有选择,这里有Ruby for Windows 一个班轮
$ ruby -ne "ARGF.lineno=0 if ARGF.eof?; print if ARGF.lineno==3" *.txt
【讨论】: