将大量文件追加在一起,不带开始/结束行



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

@echo off
SET allFiles=S:scratchtest1.txt S:scratchtest2.txt S:scratchtest3.txt 
SET mainFile=S:scratchmain.txt
SET tempFile=S:scratchtmp.txt
break>S:scratchtmp.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 行,但不会跳过最后一行。对于大文件和/或许多文件,它也很慢。

有没有更好/更快的方法来以这种方式附加多个文件,或者我应该考虑在程序中逐行写出?

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

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
SET allFiles=S:scratchtest1.txt S:scratchtest2.txt S:scratchtest3.txt 
SET mainFile=S:scratchmain.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:scratchtest1.txt','S:scratchtest2.txt','S:scratchtest3.txt')
$mainFile = 'S:scratchmain.txt'
Del $mainFile
ForEach ($File in $allFiles){
Get-Content $File | Select -Skip 10 | Select -SkipLast 1 | Out-File $mainFile -Append -Enc Ascii
}

最新更新