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

【秀丸のマクロなどで】

次の機能を秀丸のマクロなどで実現してください。

《機能》
多重階層構造のフォルダ群があって、各フォルダ内にある複数のテキストファイル
の先頭に固定のテキスト文字列の1行を挿入して上書き保存する。

《条件》
(1)テキストファイルのファイル名は半角数字で、拡張子は無い(1,2,3など)。

(2)拡張子のあるファイルはパスして何も変更しない。
MAILLIST.WML

1.BAK
2.BAK
3.BAK
など

なお、多重階層構造のフォルダの扱いが難しければ、
指定した一つのフォルダだけを対象にした処理でも構いません。
両方の回答者がいれば多重の方のポイントを多くします。

よろしくお願いいたします。
ちなみに、この機能はメーラーの引っ越しに使用します。


●質問者: mkonomi
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● foobar_777
●125ポイント

長ったらしいのでPasteBinに貼ってあります
http://pastebin.com/ibNFYA9Q

MHフォルダに対しては動いているので第2階層までは試していませんが、第1階層は動くはずです。
うまく動かないとすると
・5行目の拡張子無し(*.)のみ探している
・18行目の正規表現: ^[0-9]*$ (ファイル中^^になっているのは^が\相当のエスケープ文字なので)
あたりが怪しいです。
バッチの6行目にpauseを入れると画面が自動で消えなくなるので、画面を上にスクロールしてみると何か解るかもしれません。

#書き込み禁止ではないですよね…


mkonomiさんのコメント
回答ありがとうございます。 下のコメント欄からの続きですが、 実は例に示したフォルダの階層構造において 実際のフォルダ名の文字コードは RootFolder 半角英数字 Folder01 全角日本語(漢字の氏名) Folder02 全角日本語(漢字の氏名) Folder02_01 半角英数字 です。 Folder01、Folder02では 指定されたパスが見つかりません 0個のファイルをコピーしました。 Folder02_01では 1個のファイルをコピーしました。 パスの中に全角日本語と半角英数字が混在しているのが混乱の基かもしれません。 結構文字化けしています。

mkonomiさんのコメント
Folder01 全角日本語(漢字の氏名) Folder02 全角日本語(漢字の氏名) をそれぞれ半角英数字に書き換えるとすべてOKでした。 全角日本語のままで実現するのは難しいですか?

foobar_777さんのコメント
パス中に空白がなければ5行目末尾の %%~si を %%i に変更すればよいと思います。 #文字化けしているように見えるのは~sでShort File Nameに変換しているためです。 #空白が入っていても空白なしのフルパス名に変換しているつもりでした。

mkonomiさんのコメント
> パス中に空白がなければ5行目末尾の %%~si を %%i に変更すればよいと思います。 %%~si を %%i に変更した場合 スクリーンには すべてのファイルがフルパスで正しく表示されるますが、 0個のファイルをコピーしました。 1個のファイルをコピーしました。 などはありません 結果はすべてのフォルダのすべてのファイルが元のタイムスタンプのままです。 a.batを置いたフォルダの上位階梯のフォルダの名称が半角英数字で半角の空白を含みます。 具体的には Program Files フルパスではなく、相対パスを用いる案はないのでしょうか?

mkonomiさんのコメント
a.batを置いているフォルダ以下のフォルダを階梯を保ったまま <span style="font-weight:bold;color:#FF0000;">ドライブのルート</span>へコピーして試すと上手くゆきました。 (%%~si を %%i に変更したまま)

mkonomiさんのコメント
パスが半角全角混在でかつパス中に空白がある場合の対処は難しいのでしょうか?

質問者から


後だしの条件ですが、書洩らしていましたので追加します。
《条件》
(3)フォルダの名称は半角英数字のフォルダと全角日本語のフォルダが混在している。


2 ● siachan
●175ポイント ベストアンサー

秀丸のマクロで作ってみました

http://pastebin.com/Un6Kh3MY

冒頭の2?6行目が設定なので、環境に合わせて変更してください。

$basedirは、基準ディレクトリの指定でこれ以下のファイルを処理します。
$tempfile、$result、$erroutに関してはディレクトリ名だけ変えればいいと思います(途中で削除するので消えてもいいファイル名で)
$messageはそのままですね

ディレクトリ名に全角文字があっても問題ないですが、unicodeだと駄目みたいですね…

おかしな動作をするかもしれないのでバックアップは忘れずにお願いします(対象外のファイルを編集することはないはずですが)


mkonomiさんのコメント
siachanさん 秀丸マクロを使用した回答ありがとうございました。 さっそく試させていただきしました。 結果は完璧です。 最後に__result__.txtが未保存の秀丸として表示されているので 名前を付けて保存することができました。 ┌─── (1/36)Z:\フルパス1\1. . .成功 (2/36)Z:\フルパス1\10. . .成功 ・ ・ (36/36)Z:\フルパス3\9. . .成功 終了 └─── --- ひとつのフォルダ内のメールヘッダー付き複数のメールを特定の文字列(※)をセパレ ータとしてひとつの連続テキストにしておけば、Sylpheedでそれを使用して複数の メールをまとめて一気にインポートすることができることがわかりました。 siachanさんのコードをお手本にして、それ対応の出力を作るように自分で変更して みたいと思います。 (※) From dummy@xyz.com
関連質問

●質問をもっと探す●



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