こんばんは
Windows 7/8 64bit を使っています。
毎日仕事で処理するファイルに、ある単純作業があり、面倒で困っています。
2行からなるXMLファイルです。
1行目が「不要な文字列不要な文字列<?xml version="1.0"?>」となっています。
2行目は、延々とXMLファイルの内容が続きます。途中に改行はありません。
このままだと後工程で処理ができないため、1行目を「<?xml version="1.0"?>」に変えなければなりません。「不要な文字列」の部分は毎回異なりますが、だいたい100文字くらいです。2行目のXML本体ですが、大きいときには6MBくらいあるときがあります。
いつもはファイルを開いて一行目の「不要な文字列」を手動で削除していますが面倒です。たとえば、テキストファイルを右クリックして表示されるコンテキストメニューから「不要な文字列削除」を選ぶだけ、とかがいいです。batファイルなどを作ってドラッグ&ドロップするのすら面倒です。右クリック&ショートカットの動作でこの処理ができないでしょうか?
質問などはコメント欄で受け付けています。
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"
登録はうぃんどさんの方法でするとして
#wshの方法もあった気がしたけど見つけられない
登録するバッチファイルはこんなのでどうでしょう?
move %1 %1.old echo "<?xml version="1.0"?>" >> %1 more +1 %1.old >> %1
ありがとうございます。
できたような気がしたんですが、対象のファイルがUTF-16で、これが原因でできないっぽいです。batファイル自体はShift-JISにしておかないと動作しないみたいなのでShift-JISにするとして、新たに出力されるファイルがSHIFT-JISになってしまっています。
出力するときに文字コードを指定できるか調べたのですが、みつかりませんでした。UTF-16のファイルを扱って、出力もUTF-16にする場合はどうしたらよいでしょうか?
うぐ、そんな落とし穴が。
知りませんでした。勉強になります。
たぶんDOS環境のエミュレーションとかで勝手に変換されるんでしょう。
回避策分かりません。バッチファイルじゃ無理かも。
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"
できたっぽいです!ちょっと時間がなくて最終確認が取れませんが、これでいけそうです!
最終確認取れました。ここからさらにバッチファイルを呼び出すこともできました。最高です!
できたっぽいです!ちょっと時間がなくて最終確認が取れませんが、これでいけそうです!
2013/09/03 22:08:55最終確認取れました。ここからさらにバッチファイルを呼び出すこともできました。最高です!
2013/09/07 15:52:23