人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【100?200pt】テキストファイルの1行目だけを特定の文字列に一瞬で置き換える方法(ファイルは開かない)

こんばんは
Windows 7/8 64bit を使っています。
毎日仕事で処理するファイルに、ある単純作業があり、面倒で困っています。

2行からなるXMLファイルです。
1行目が「不要な文字列不要な文字列<?xml version="1.0"?>」となっています。
2行目は、延々とXMLファイルの内容が続きます。途中に改行はありません。

このままだと後工程で処理ができないため、1行目を「<?xml version="1.0"?>」に変えなければなりません。「不要な文字列」の部分は毎回異なりますが、だいたい100文字くらいです。2行目のXML本体ですが、大きいときには6MBくらいあるときがあります。

いつもはファイルを開いて一行目の「不要な文字列」を手動で削除していますが面倒です。たとえば、テキストファイルを右クリックして表示されるコンテキストメニューから「不要な文字列削除」を選ぶだけ、とかがいいです。batファイルなどを作ってドラッグ&ドロップするのすら面倒です。右クリック&ショートカットの動作でこの処理ができないでしょうか?

質問などはコメント欄で受け付けています。

●質問者: にぎたま
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● だわかき
●0ポイント

バッチファイルでテキストファイルの1行目だけ変更
http://oshiete.goo.ne.jp/qa/7828732.html


2 ● TransFreeBSD
●50ポイント

登録はうぃんどさんの方法でするとして
#wshの方法もあった気がしたけど見つけられない

登録するバッチファイルはこんなのでどうでしょう?

move %1 %1.old
echo "<?xml version="1.0"?>" >> %1
more +1 %1.old >> %1

http://q.hatena.ne.jp/1282045430#a1032760


にぎたまさんのコメント
ありがとうございます。 できたような気がしたんですが、対象のファイルがUTF-16で、これが原因でできないっぽいです。batファイル自体はShift-JISにしておかないと動作しないみたいなのでShift-JISにするとして、新たに出力されるファイルがSHIFT-JISになってしまっています。 出力するときに文字コードを指定できるか調べたのですが、みつかりませんでした。UTF-16のファイルを扱って、出力もUTF-16にする場合はどうしたらよいでしょうか?

TransFreeBSDさんのコメント
うぐ、そんな落とし穴が。 知りませんでした。勉強になります。 たぶんDOS環境のエミュレーションとかで勝手に変換されるんでしょう。 回避策分かりません。バッチファイルじゃ無理かも。

3 ● usamin5885
●150ポイント ベストアンサー

PowerShellのワンライナーでできますが、
改行コードがCRLFになっちゃうんですよね。
LFじゃないとダメですか?

"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" "mv \"%1\" \"%1.old\";'<?xml version=\"1.0\"?>'|Out-File \"%1\";gc \"%1.old\"|select -skip 1|Out-File -Append \"%1\""

これをコンテキストメニューのcommandとして登録すれば良いです。
分かりづらいと思うので、元のコードも載せておきます。

$FILE = "c:\hoge.xml"
mv "$FILE" "$FILE.old"
'<?xml version="1.0"?>' | Out-File "$FILE"
gc "$FILE.old" | select -skip 1 | Out-File -Append "$FILE"


にぎたまさんのコメント
できたっぽいです!ちょっと時間がなくて最終確認が取れませんが、これでいけそうです!

にぎたまさんのコメント
最終確認取れました。ここからさらにバッチファイルを呼び出すこともできました。最高です!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ