2 つのテキスト ファイルがあります。4 行ある file1.txt の内容を取り、file2.txt の最初の 4 行に追加したいと思います。file2.txt の最初の 4 行のすべてのレコードを上書きする必要がありますが、残りの元のコンテンツ (他の行) は保持します。
バッチまたは Windows プロンプトを使用してそれを行うにはどうすればよいですか?
2 つのテキスト ファイルがあります。4 行ある file1.txt の内容を取り、file2.txt の最初の 4 行に追加したいと思います。file2.txt の最初の 4 行のすべてのレコードを上書きする必要がありますが、残りの元のコンテンツ (他の行) は保持します。
バッチまたは Windows プロンプトを使用してそれを行うにはどうすればよいですか?
copy file1.txt temp.txt
echo. >> temp.txt
more +5 file2.txt >> temp.txt
move /y temp.txt file2.txt
編集:「echo。>> temp.txt」命令を追加しました。これにより、temp.txtに改行が追加され、file2.txtの「クリーンな」マージが可能になります(file1.txtが改行で終わっていない場合) 。
Gnutilsからcoreutilsを入手すると、cygwinをインストールしなくても、Cygwinで実行できる多くのことを実行できるようになります。次に、頭、尻尾、猫などを使用して、探していることを実行できます。
例えば
head -n 4 file2.txt
file2の最初の4行を取得します。
上にリンクされているページからzipを抽出し、binディレクトリから使用する必要のあるutilsを取得して、パス内のディレクトリに配置します。たとえば、以下の場合、mv、head、tailが必要です。組み込みのDOSmoveコマンドを使用することもできますが、オプションを少し変更する必要があります。
質問は少し不明確ですが、file2.txtの最初の4行を削除して、file1.txtに追加する場合は、次のようにすることができます。
head -n 4 file2.txt >> file1.txt
tail -n +5 file2.txt >> temp.txt
mv temp.txt file2.txt
バッチだけでは、それができるかどうかわかりません。
Unix コマンドを使用すると、 Cygwinを使用して Windows で Unix コマンドを簡単に使用できます。
その場合、次のことが必要です。
#!/bin/bash
head -n 4 file1.txt > result.txt # first 4 lines of file1
tail -n +5 file2.txt >> result.txt # append lines 5, 6, 7... of file2
mv result.txt file2.txt # replace file2.txt with the result
2 つのファイルの先頭にある 4 行がまったく同じ量のスペースを占めていない限り、ファイル全体を書き直さない限り、それはできません。
ファイルの任意の時点でデータを挿入または削除することはできません。既存のデータを上書きしたり (バイトごとに)、ファイルを切り捨てたり末尾に追加したりできますが、途中で削除または挿入することはできません。
したがって、基本的には次のことが必要です。
Unix のヘッド/テール コマンドを使用すると、これをかなり簡単に行うことができます。それが許容できる解決策であれば、Cygwinから取得できます。Windows Services for Unixの head/tail も機能する可能性があります。
Windowsバッチ以外でスクリプトを作成した場合は、それを行うことができます。Windowsスクリプティングホストを使用したvbscriptまたはjscriptで実行できるはずです。それらのそれぞれには、あるファイルから行を取得し、別のファイルの行を上書きする方法があります。
これを行うには、一時的な 3 番目のファイルを作成し、最初のファイルから行を取り出して一時ファイルに追加し、次に 2 番目のファイルを読み取り、キャリッジ リターンとラインフィードの 4 つのペアを読み取った後、残りを一時ファイルに書き込みます。 . 次に、2 番目のファイルを削除し、一時ファイルの名前を 2 番目のファイル名に変更します。