我希望将多个文件附加到主文件中,不包括起始行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行,但不会跳过最后一行。对于大文件和/或许多文件来说,它也很慢。
是否有更好/更快的方式以这种方式附加大量文件,还是应该考虑在程序中逐行写出?
答案 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
}