- 締切済み
バッチによるテキストファイル操作について
バッチファイルにて、テキストファイルの任意の行を削除したいのですが、コマンドはどのように記述すれば良いでしょうか? 初心者の為、方法が良くわかりません。 具体的には5000行のテキストファイルから1~20行目を削除したいと考えています。 ちなみにOSはXPと2000の両方です。 以上、どなたか宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- pita-gora
- ベストアンサー率70% (102/145)
こんにちは。任意の行の削除の場合ではなく >5000行のテキストファイルから1~20行目を削除したい という要望なら以下のコマンドで可能です。ここではテキストファイルのファイル名を sample.txt とします。 more +20 sample.txt>sample2.txt sample2.txt が削除後のテキストファイルです。
- dscripty
- ベストアンサー率51% (166/325)
この質問のようなテキストファイル編集の自動化は、sed でするのが一般的だけど、バッチファイルじゃないとダメってなんだろう? っていうのはおいといて For 内部コマンド使えばできるよ。 一度、『for /?』でヘルプを確認してみて! 下の例は、引数で指定したファイルの先頭から 5行を削除する……はず。 C:\>Type "sed_1,5d.bat" @Echo off Set TGT_FILE=%1 Set TMP_FILE=%TGT_FILE%.tmp Type nul>"%TMP_FILE%" For /F "skip=5 tokens=* usebackq" %%i in ("%TGT_FILE%") do Echo.%%i>>"%TMP_FILE%" Move /Y "%TMP_FILE%" "%TGT_FILE%" エラー処理書いてないから、 %TGT_FILE% の存在しないときの処理 %TMP_FILE% というフォルダがあったときの処理 %TMP_FILE% が存在したとの処理 %TMP_FILE% の書き込みができないときの処理 %TMP_FILE% を %TGT_FILE% に移動できなかったときの処理 をどうするか決めて、バッチファイルに追記して使ってね!
- nda23
- ベストアンサー率54% (777/1416)
バッチじゃないんですが、JavaScriptでは? var 文字コード = "SHIFT_JIS"; if ( WScript.Arguments.length != 1 ) { WScript.Echo("対象ファイルを指定してください"); WScript.Quit(1); } var 元データ = new ActiveXObject("ADODB.Stream"); 元データ.Open(); 元データ.Type = 2; 元データ.Charset = 文字コード; 元データ.LoadFromFile(WScript.Arguments(0)); var 改行数 = 0; while (( 元データ.Position < 元データ.Size ) && ( 改行数 < 20 )) { if ( 元データ.ReadText(1) == '\n' ) 改行数++; } var 新データ = new ActiveXObject("ADODB.Stream"); 新データ.Open(); 新データ.Type = 2; 新データ.Charset = 文字コード; 元データ.CopyTo(新データ); 新データ.SaveToFile(WScript.Arguments(0),2); WScript.Quit(0); ファイル名の拡張子をJSにします。 サンプルはインデントに漢字空白を使っています。
お礼
回答いただきありがとうございます。 たしかに教えていただいたやり方で出来ました。 ただ、今回はどうしてもバッチでないといけない理由がありまして・・・ ありがとうございました。