ディレクトリ単位のマクロ一括処理についNo.01165
horiguch さん 00/03/09 13:13
 
TOSHIと申します。
初めて質問させていただきます。
もし以前同様の質問があったら申し訳ありません。

あるディレクトリにさらにサブディレクトリがいくつかあり、その中に
大量のテキストファイルが格納されています。
このテキストファイル群に対し秀丸マクロを次々と実行し保存する、
というマクロはどう書けばよろしいのでしょうか?
理想としては、ダイアログボックスでテキストが格納された
ディレクトリを指定し、そのディレクトリ以下のファイルに対し
マクロを実行する、という形です。

教えていただけたら幸いです。
よろしくお願い致します。

[ ]
RE:01165 ディレクトリ単位のマクロ一括処No.01170
ENCODINGSHIFTJIS さん 00/03/09 18:58
 
後半の部分は次のようにもできます。

 01123 00/03/03 10:28 RE:01120 文字列置換マクロについて教えてください
 01127 00/03/03 15:10  RE:01123 文字列置換マクロについて教えてください
をまとめたものでは。

DIRX.bat  ディレクトリ 処理ファイル マクロ名 ---- 共通使用
LFNFOR ON
CD %1
FOR %%A IN (%2) DO wscript.exe HIDEMARUX.js %3 %%A
// FOR の中の HIDEMARUX.js は絶対パスを付けて。

HIDEMARUX.js マクロ名 処理ファイル名 ------------- 共通使用
wsh=WScript.CreateObject("WScript.Shell");
wsh.Run("\"D:\\Program Files\\Hidemaru\\Hidemaru.exe\""
   + " /x" + WScript.Arguments(0) + " " + WScript.Arguments(1));
// .BAT では win プログラムの完了待ちを捕捉できなかった。

sampleX.mac ---- 1ファイル処理のマクロ 処理毎に
テキスト処理
save exit  // 保存終了 in に 上書き

を準備して、後はディレクトリ選択のGUIだけです。
でもよく考えたら全部シェル周りは Wsh で書けますね。

・・実行例 ------------------------------------------------
18:10 D:\Hidemaru DIRX.bat . *.bat sampleX.mac
18:10 D:\Hidemaru LFNFOR ON
18:10 D:\Hidemaru CD .
18:10 D:\Hidemaru FOR %A IN (*.bat) DO wscript.exeHIDEMARUX.js sampleX.mac %A
18:10 D:\Hidemaru wscript.exe HIDEMARUX.js sampleX.mac DIRX.bat
18:10 D:\Hidemaru wscript.exe HIDEMARUX.js sampleX.mac HIDEMARUX.bat
18:10 D:\Hidemaru

__E__

[ ]
RE:01170 ディレクトリ単位のマクロ一括処No.01182
ENCODINGSHIFTJIS さん 00/03/10 12:47
 
前半の部分は次のようなイメージ?。

// explo.mac
// カレントディレクトリを記憶するのが問題
// registry 借用もすっきりしない。
// 田楽.DLL の xxサポート会議室
// http://www.ceres.dti.ne.jp/~sugiura/index.html
// のグローバル変数の議論に参加してみて下さい。
// 使い方
// 最初にレジストリに CurrentPath のキーを作ります。(文字列)
// 新面を開きマクロ実行。以降 ファイル名を選択してマクロ実行
//   そういえば、秀丸にはファイラーが無かった? ここかな
//    データ取り込みは遅い。戻る時は ctrl+Z
//     .. を選択して実行で親に行く
//      
//
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
if(!selecting){writeregstr "CurrentPath","C:\\Windows\\デスクトップ"; }
    $currentpath=getregstr("CurrentPath" );
closereg
$subname=gettext(seltopx,seltopy,selendx,selendy);
//
selectall
run
 "command.com /c dir/W/AD/ON "+$currentpath+"\\"+$subname+" >o";
delete insertfile "o";
gofiletop
searchdown "ディレクトリは ";if(!result)endmacro
            right 8;
beginsel golineend
      $currentpath=gettext(seltopx,seltopy,selendx,selendy);
title $currentpath; title -1;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregstr "CurrentPath",$currentpath;
closereg
// エラー対策何もなし。動くが使えない。
// .DLL を使って作ったほうがストレートでしょう。


[ ]
RE:01182 ディレクトリ単位のマクロ一括処No.01193
杉浦 まさき さん 00/03/12 00:46
 
えっと、横から失礼します。
杉浦 まさき です。

>// 田楽.DLL

…の作者ですが、その DLL に ENUMPATH という
そのものズバリの関数がありますので、
それを使えば以下のような感じでできます。
#珍しく宣伝モード(^^;

loaddll hidemarudir + "\\DengakuDLL.dll";
// カレントフォルダを親フォルダにする。
#n = dllfunc("SETCURDIR","c:\\parent_dir");
// そのフォルダ以下の *.txt ファイルを
// サブフォルダ内も含めて検索
#n = dllfunc("ENUMPATH","/f *.txt");
while (1) {
  // 見つかったファイル名を親フォルダからの相対パスで返す
  $file = dllfuncstr("FINDNEXT");
  if ($file == "") break; // 検索完了
  $fullpath_filename = "c:\\parent_dir\\" + $file;
  // 以下 $fullpath_filename で指定されるファイルに対する処理
}
freedll;
endmacro;


[ ]
RE:01193 ディレクトリ単位のマクロ一括処No.01195
ENCODINGSHIFTJIS さん 00/03/13 15:34
 

杉浦 まさき  さんので十分です。

秀丸の中で完全処理するならば、問題はショートカットです。
フォルダーのショートカットをエクスプローラのエミュレートで
扱わないと。Win版のファイラーはちゃんとやっているのかな?
試して回る気力無し。

フォルダー指定とはちょっと違うが、エクスプローラでファイルを
複数選択して WSHスクリプトにドロップした実験ではコマンドライン
最大長に入る程度のファイル数しか受付できなかった。
従って、crtl+A でファイル全選択をドロップする形は?

//−−−−−−−−−−−−−−−−−−−−−−−−−−
1フォルダだけのドロップなら初期のスクリプトをもう一押しすればできます。

// in 1処理ディレクトリ
var wsh,fs,fold,fname,enu;
    wsh= WScript.CreateObject("WScript.Shell");
     fs= WScript.CreateObject("Scripting.FileSystemObject");
   fold= fs.GetFolder(WScript.Arguments(0)); // フォルダでないとエラー
WScript.Echo("sampleX.mac: "+fold.Path);    // 確認?
    enu=new Enumerator( fold.Files);

for(; !enu.atEnd(); enu.moveNext()){
    fname= enu.item().Name;
//WScript.Echo(fname.substr(fname.length-4));
 if(fname.substr(fname.length-4) != ".bat")continue;  // 拡張子選択
wsh.Run("\"D:\\Program Files\\Hidemaru\\Hidemaru.exe\" /xsampleX.mac " +
       enu.item().Path);
// .BAT では win プログラムの完了待ちを捕捉できなかった。
 }

WScript.Echo("マクロ処理終了");// 処理件数等を表示

win プログラムを直列実行させるのは気を使う。 .BAT  はいらなくなりました。

__E__


[ ]
RE:01195 ディレクトリ単位のマクロ一括処No.01196
horiguch さん 00/03/13 17:12
 
杉浦 まさきさん、ENCODINGSHIFTJISさん。
ご回答ありがとうございました。

さっそく杉浦さんの”田楽DLL”、使わせていただきます。
よろしくお願いします!


[ ]
RE:01195 ディレクトリ単位のマクロ一括処No.01199
杉浦 まさき さん 00/03/14 00:06
 
ENCODINGSHIFTJIS さん、こんばんは。
杉浦 まさき です。

ツリーの本題からはちょっと外れますが…

>秀丸の中で完全処理するならば、問題はショートカットです。
>フォルダーのショートカットをエクスプローラのエミュレートで
>扱わないと。

が〜ん!そんなもんもありましたねぇ…そういえば(^^;。

ちなみに田楽鯖&DLLではエミュレートしてませんが、
OS 付属のコンソールアプリでも
フォルダのショートカットは認識しないですし、ね(^^;。


[ ]
RE:01195 ディレクトリ単位のマクロ一括処No.01245
ENCODINGSHIFTJIS さん 00/03/24 11:07
 
>// .BAT では win プログラムの完了待ちを捕捉できなかった。
Start/w でできてしまいました。

 type dirx.txt |start/w hidemaru.exe /xh.mac

入力のパイプ結合もできるようだ。ヘルプに無い。

__E__

[ ]
RE:01245 ディレクトリ単位のマクロ一括処No.01248
秀丸担当 さん 00/03/24 16:47
 
> type dirx.txt |start/w hidemaru.exe /xh.mac
>
>入力のパイプ結合もできるようだ。ヘルプに無い。

これはサポート外の機能です。
バージョンによってできないバージョンもあります。

[ ]
RE:01248 STDOUT 標準出力No.01272
ENCODINGSHIFTJIS さん 00/03/28 13:40
 
関連として
// stdout.mac -----------------------------------
//   全選択して STDOUT に出力します
// コマンドラインでバッチ実行を好むときは使います。
// 早さは一時ファイルを作るのと変わりはないが
// DOS窓> start/w hidemaru /xAAA.mac INFILE |more
//
// AAA.mac の最終に execmacro "STDOUT.mac"; すると
//  吐き出される。
//
selectall copy
 runsync "D:\\CLIPUTIL\\CLIPUTIL.EXE -PASTE";
quit                                       // いずれ
endmacro
// CLIPUTIL.exe は
// http://rd.vector.co.jp/soft/win95/util/se072664.html
// より。

[ ]