[ 新規に投稿する ]

秀丸マクロでフォルダーを移動する方法No.10784
popper さん 26/01/13 01:06 [ コメントを投稿する ]
  秀丸マクロでフォルダーを移動する方法を
ネットで調べてみると、

「秀丸マクロでは、chdir コマンドを使うことで作業フォルダー(カレントディレクトリ)を移動できます。」

と書いてありましたので、

秀丸マクロのヘルプで「chdir」を検索したところ、見つかりません。

.bat ファイルを経由して(.bat ファイルで cd .. などとして)、runsync などで .bat ファイルを実行するとできなくはないのですが、

秀丸マクロだけで、フォルダーを移動するにはどうすればよいのでしょうか?

よろしくお願い致します。
[ ]
RE:10784 秀丸マクロでフォルダーを移動する方法No.10785
h-tom さん 26/01/13 22:13 [ コメントを投稿する ]
  h-tom です。

>秀丸マクロだけで、フォルダーを移動するにはどうすればよいのでしょうか?

Ver.9以降だとデフォルト設定ではカレントフォルダは移動しないので、設定を変更する必要があります。
・動作環境-トラブル対策-「その他のトラブル対策」にある「カレントフォルダ移動」

あとは、COMで WSHのShellオブジェクトにある"CurrentDirectory"使えば任意位置に変更可能。
[ ]
RE:10785 秀丸マクロでフォルダーを移動する方法No.10786
popper さん 26/01/14 00:34 [ コメントを投稿する ]
  ご回答ありがとうございます。

「デフォルト設定ではカレントフォルダは移動しない」とのことなので、

何か別の方法を検討しようと思います。

「トラブル対策」を変更までしたくはないので。。。

ありがとうございました。
[ ]
RE:10786 秀丸マクロでフォルダーを移動する方法No.10787
秀丸担当 さん 26/01/14 08:21 [ コメントを投稿する ]
  現在のバージョンの通常では、h-tomさんも書かれている通り、秀丸エディタのプロセス内で共通のカレントディレクトリに相当するものは変わらないです。

秀丸エディタとしての振る舞いの現在のフォルダは、開いているファイルそのものの場所になります。
[ファイル]→[開く...]の場所が、ファイルのある場所になります。
[ファイル]→[新規作成]をしたときも、無題ファイルであっても現在のフォルダを引き継ぎます。

こういう意味の現在のフォルダをマクロで変更する場合は、以下のようにするといいです。

changename "c:\\folder\\"+basename2;
endmacro;

ファイルを開いているときは、ファイルのフルパスも変わってしまうので注意が必要です。
ファイルが移動するわけではなく、秀丸エディタ内のフルパスが変わっていて、上書き保存するとファイルがそこに作成されます。

新規作成と共に現在のフォルダを明示的に指定するには、hidemaru.exeの起動オプション/dでできます。
マクロからする場合は、openfileを使ってhidemaru.exeを起動オプション付きで実行できます。

openfile "/d c:\\folder";
endmacro;
[ ]
RE:10787 秀丸マクロでフォルダーを移動する方法No.10788
popper さん 26/01/14 12:39 [ コメントを投稿する ]
  いろいろとアドバイスありがとうございます。

.bat ファイルでの「cd..」に相当することをやりたかったのです。

今は、マクロ(A.mac)からバッチファイル(B.bat ここに cd.. を書いてある)を runsync して
一応機能しているのですが、マクロだけでできないものかと質問した次第です。

アドバイスいただいた方法はまだ試していませんが、私が求めている機能は実現できないような気がしています。。。

ありがとうございました。
[ ]
RE:10788 秀丸マクロでフォルダーを移動する方法No.10789
秀丸担当 さん 26/01/14 15:42 [ コメントを投稿する ]
  何らかのプログラムをカレントフォルダ指定で実行するには、runexを使うといいです。
例えば以下のようにします。

$d=directory2;
$updir=leftstr($d,strrstr($d,"\\"));//ルートは不可
runex "cmd.exe /C test.bat"
    , 1     //sync   0:async, 1:sync
    , 0, "" //stdin
    , 0, "" //stdout
    , 0, "" //stderr
    , 2, $updir //folder 0:none, 1:current, 2:specify
    ;
endmacro;


または、JavaScriptでhidemaru.createProcessを使う方法もあります。
こちらのほうが簡潔に書くことができます。

js{
  var d=directory2();
  var updir=d.slice(0,d.lastIndexOf("\\"));//ルートは不可
  hidemaru.createProcess("cmd.exe /C test.bat", updir);
}
endmacro;
[ ]
RE:10789 秀丸マクロでフォルダーを移動する方法No.10790
popper さん 26/01/15 12:51 [ コメントを投稿する ]
  ご回答ありがとうございます。

JavaScriptを使ったやり方でやってみたところ、
やりたかったことが実現できました!

js{} はこれまで使ったことがなかったのですが、マクロで js{} が使えると他にもいろいろ便利に使えそうな気がします。
今回 js{} について知ることができてよかったです。

本当にありがとうございました。

[ ]

[ 新規に投稿する ]