在没有开始/结束行

时间:2017-07-10 18:46:50

标签: batch-file append

我希望将多个文件附加到主文件中,不包括起始行10行和结束行。在追加之后,我将删除这些文件。目前我最好的尝试:

@echo off
SET allFiles=S:\scratch\test1.txt S:\scratch\test2.txt S:\scratch\test3.txt 
SET mainFile=S:\scratch\main.txt
SET tempFile=S:\scratch\tmp.txt
break>S:\scratch\tmp.txt
(for %%a in (%allFiles%) do (
   more +10 %%a > %tempFile%
   copy /Y %mainFile% %%a
   type %%a %tempFile% > %mainFile%
   del %%a
))
del %tempFile%
%txtEditr% %mainFile%

这会在追加时跳过前10行,但不会跳过最后一行。对于大文件和/或许多文件来说,它也很慢。

是否有更好/更快的方式以这种方式附加大量文件,还是应该考虑在程序中逐行写出?

1 个答案:

答案 0 :(得分:0)

此批处理解决方案可能会减慢大文件的速度,
它跳过10行然后读取每行存储当前行的行和
打印上一行 - 因此可以跳过最后一行。

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
SET allFiles=S:\scratch\test1.txt S:\scratch\test2.txt S:\scratch\test3.txt 
SET mainFile=S:\scratch\main.txt
( for %%F in (%allFiles%) do (
    Set "Last="
    for /f "skip=10 delims=" %%L in (
      ' Findstr "^" %%F '
    ) Do (
      If defined Last Echo:!Last:~1!
      Set "Last=#%%L"
    )
  )
) >"%mainFile%"
%txtEditr% %mainFile%

这不要求PowerShell脚本应该更快。

$allFiles = @('S:\scratch\test1.txt','S:\scratch\test2.txt','S:\scratch\test3.txt')
$mainFile = 'S:\scratch\main.txt'
Del $mainFile
ForEach ($File in $allFiles){
  Get-Content $File | Select -Skip 10 | Select -SkipLast 1 | Out-File $mainFile -Append -Enc Ascii
}