2017-07-10 16 views
0

先頭の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

このバッチソリューションは、これは、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 
} 
関連する問題