Jスクリプトでファイル名置換処理を裏で走No.10438
jo さん 22/10/26 17:52
 
置換処理がとても楽にできるようになったのは便利で助かります

追加での相談ですが名前変更ダイアログがたまに一瞬ひらいたり
することがあります スクリプトを実行したあとすぐに
別のタブで他のファイルを開いたりすることは可能でしょうか?
置換処理がはしってるあいだ操作ロックが掛かってるようですが
ここは同時処理してバックグランドで置換できないでしょうか?

[ ]
RE:10438 Jスクリプトでファイル名置換処No.10439
秀丸担当 さん 22/10/27 09:47
 
調べてみたところ、名前の変更(一括)などは、操作の前後で食い違いが無いように、
もともとバックグラウンドで処理しているところを、あえて完了まで待機するように
してありました。

名前の変更(一括)などの実際の変更は、Windowsのコピー/移動の仕組みを通じて、同
じ場所への別名移動という処理になっています。
これによって[元に戻す]が可能になっています。
そのため、多い場合はWindowsのコピーと同様の進捗ダイアログが出たりします。

待機しているところやめたり、スクリプトでなんとかしたりといった方法も考えられ
ますが、一番簡単な方法としては、別ウィンドウにすると簡単です。
多そうな場合、[新規ウィンドウ]で別ウィンドウにして、そこで処理します。
別ウィンドウは別のEXEとして起動しているので、何もかもが並行です。

別ウィンドウにするとき、注意するべきところは[ツール]→[オプション]→[プログ
ラム]で[最後のタブと分割を復元]にしているとき、2番目のウィンドウを後から閉
じると、そちらが記憶されてしまいます。
これを解決するには、右側の[復元の詳細(M)...]より、最初のウィンドウだけを記憶
の対象にするといいです。

[ ]
RE:10439 Jスクリプトでファイル名置換処No.10441
jo さん 22/10/27 15:10
 
js:RenameReplace(" | T","");
こういうjsファイルを作って呼び出してリネームしてるんです
フォルダタブの左上にOSの かなアイコンが多数出てちらつき
たまにファイルダイアログがでます

新規ウインドウを開いてそこで処理するというほどでもないので
スクリプトの書き方 あるいは設定で待機しないようにする方法はないでしょうか?
ウインドウ開いて処理してまた閉じるという
操作がひつようになりますしね
内部的に新規ウインドウ扱いでバックグランド処理させるのも
いいのかもしれませんプログラム素人の想像です

十秒みまんくらいですがそのフォルダ以外での
操作ができなくなる拘束は不要ではないかと思います
変更処理かけてるフォルダに対しての操作ロックをかけるという
考え方が自然だと思います
これは秀丸ファイラとは関係ないと思われますが
マウスカーソルがノーマルとすなどけいを高速で繰り返すのもOSの仕様ではあると思
います
ちょっと不愉快なところがあります



>調べてみたところ、名前の変更(一括)などは、操作の前後で食い違いが無いように、
>もともとバックグラウンドで処理しているところを、あえて完了まで待機するよう
>にしてありました。
> ......
>これを解決するには、右側の[復元の詳細(M)...]より、最初のウィンドウだけを記
>憶の対象にするといいです。

[ ]
RE:10441 Jスクリプトでファイル名置換処No.10442
jo さん 22/10/28 05:01
 
更にリネームしたいフォルダはだいたいきまってます
ブラウザのDLフォルダなどが一例です
あらかじめそのフォルダのサブフォルダもふくめた
ファイル全てに下記スクリプトでリネーム処理させることはできますか?そのさいそ
の処理中はフォルダロックして
他のファイラー操作はうけつけるというのがベストかなと思います
ぜひ実装検討願います


>js:RenameReplace(" | T","");
> ......
>>これを解決するには、右側の[復元の詳細(M)...]より、最初のウィンドウだけを記
>憶の対象にするといいです。

[ ]
RE:10442 Jスクリプトでファイル名置換処No.10443
秀丸担当 さん 22/10/28 09:11
 
現在待機しているところを、待機しないように指定できたらいいです。
スクリプトのパラメータ指定で、そういう指定ができるようにしようと思います。

[ ]
RE:10443 Jスクリプトでファイル名置換処No.10445
jo さん 22/10/28 15:38
 
リネームするフォルダを開いて選択していなくても
任意のタイミングでスクリプト指定する方法があれば教示ください

またリネームいがいでもスクリプトの処理がおわれば
任意のサウンド再生もできたらうれしいです
オプションにつけくわえファイラーでならすのか
スクリプトにファイルパス記述して関連付けられたソフトで
ならすのか ただ後者だと再生終了後ソフトも終了させる連携組まないとソフトが残
ってしまうのが不便かなと
前者で実装いただけると便利かと思います

>現在待機しているところを、待機しないように指定できたらいいです。
>スクリプトのパラメータ指定で、そういう指定ができるようにしようと思います。

[ ]
RE:10445 Jスクリプトでファイル名置換処No.10447
ラフ さん 22/10/30 14:39
 
聞きたいことがよくわからないが、起動は普通にブクマかツールから起動すればいい
のでは?
別フォルダで処理したいということなら、
1.GetCurrentTabでカレントタブ番号取得
2.open(対象フォルダ名,1)で対象フォルダ新規タブを開いて
3.GetCurrentTabで新しく開いたタブ番号取得
4.対象フォルダでの処理
5.SetActiveTab(元のタブ番号)で戻る
6.CloseTab(新しく開いたタブ番号)でさっき開いたタブを閉じる
などでできると思います。試してはいないけど。
若しくは、対象フォルダのタブが常にある(タブロックしているなどで)ならば、
閉じる必要がないので、3.6.が要らなくなるかな。
別タブが嫌なら、FileSystemObject使ってリネームすればいいのではないでしょうか。

サウンドについては、ファイラーの機能範囲を超えていると思うので、
COM経由でSpeech API(SAPI)で音声合成でしゃべらすか、
wavファイル再生したいなら、COM経由でWindows Media Playerを起動(ウィンドウは
無いのでBGMになる)
すれば任意のwavファイル(例えばWindowsの各種システム音)を起動すればOK
方法は WSH Jscript 音を鳴らす などで検索してください。
SAPIの方が何が終わったのかを文字列で指定できるのでお薦めかな。

[ ]
RE:10447 Jスクリプトでファイル名置換処No.10448
jo さん 22/10/30 15:23
 
ブクマやジェスチャからスクリプトファイル開くのは当然の話です
起動方法をたずねてるのではないです これくらいはよみとっていただきたいですが

フォルダタブがロックされてようがタブでフォルダが開かれてなかろうが
指定したフォルダとその下の階層のリネームをファイラー操作ロックしないで実行し
たいのです
大量にファイルが有る場合 エクスプローラや他のファイラで
あるファイルを移動などしてしまえば処理に不都合がでるでしょう

起きないようにこのソフトでそのフォルダないのファイル操作を処理中にバックグラ
ンドでロックしたほうがいいといってるんです
別タブと別ウインドウの違いくらいはよみとってもらえますか?

またバックグランドなんで別タブを表示させる必要もないわけです
バッチファイルを画面非表示にしてフォルダ作成実行するのを
イメージしてもらえばいいんじゃないでしょうか・・

まぁ実行中とわからせるためにあえてスクリプト処理してる色替えしたフォルダタブ
を表示してもいいとは思います
終わったら閉じるならそこまで邪魔でもないでしょう

音を鳴らすのも終了を認知させるためで
ビープコマンドがうまくつかえるといいのですが
こういったところも含めて 便利に使える一例を
ユーザーに提案することも必要なことではないかと思います

音の鳴らし方についてはリネームスクリプトとの連携で
たしかにいけそうですね ファイラーの範囲外というのも
微妙なラインだとは思います それでできるなら不要ではありますね

4のやりかたを知りたいという話なんですよ
またいろんなスクリプトかいて組み合わせればできることは
想像できます そもそもファイラーにお願いしてるのは
面倒なことなしに簡便にファイラーで完結する機能があれば
ユーザーにとって価値があると考えているからのご相談です

いきすぎて高度で範囲を逸脱するのであれば
却下していただくことにはなると思ってます

>聞きたいことがよくわからないが、起動は普通にブクマかツールから起動すればい
>いのでは?
> ......
>SAPIの方が何が終わったのかを文字列で指定できるのでお薦めかな。

[ ]
RE:10448 Jスクリプトでファイル名置換処No.10449
mac さん 22/10/30 19:02
 
jo さん、こんにちは

■音声再生について
WMPlayer.OCXオブジェクトを利用することで、任意の音声を再生できます。

参考Link:
https://qiita.com/Stosstruppe/items/d88f8660fedc0c466122#wav%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%86%8D%E7%94%9F


■リネームについて
1. 操作ロック問題
rename()、renameReplace()の「操作ロック問題」については、秀丸担当さんのほう
で修正いただけるようですね。

2. リネーム対象フォルダの任意指定
任意のリネーム対象フォルダを「秀丸ファイラーで開かずに」実行したい場合は、
事実上 rename()、renameReplace() を利用できません(少なくとも現状の仕様では)。
このため、ラフ さん提案の手続きのとおり、秀丸ファイラーで対象フォルダを開く
工程 2 が必須です(あるいは、秀丸担当さん提案のように新規ウィンドウで開く)。

この手続きを経ることが不満な場合は、各種スクリプト(秀丸ファイラのスクリプト
を含む)にて**自前で**リネーム処理を実装する必要があります。
リネームにまつわる処々のエッジケースを適切に処理するコードを含める・含めない、
で設計難易度が変わりますが、いずれにせよ、慣れていない人には大変かもしれませ
ん。

※「WSH JScript」等で検索すると先人が残した関連記事がたくさん出てくるので、
興味が出てきたらいろいろ読んでみることをオススメします。

[ ]
RE:10448 Jスクリプトでファイル名置換処No.10451
ラフ さん 22/10/31 00:40
 
>リネームするフォルダを開いて選択していなくても
>任意のタイミングでスクリプト指定する方法があれば教示ください
この一文で

>フォルダタブがロックされてようがタブでフォルダが開かれてなかろうが
>指定したフォルダとその下の階層のリネームをファイラー操作ロックしないで実行
>したいのです
>大量にファイルが有る場合 エクスプローラや他のファイラで
>あるファイルを移動などしてしまえば処理に不都合がでるでしょう
>
>起きないようにこのソフトでそのフォルダないのファイル操作を処理中にバックグ
>ランドでロックしたほうがいいといってるんです
>別タブと別ウインドウの違いくらいはよみとってもらえますか?
これを読み取れる人は居ないと思いますが。
上記文章からわかるのは、アクティブなタブから自分とは違うフォルダで、スクリプ
トを使ったリネーム処理を、任意のタイミングで実行したいということだけです。


また、操作ロックをしないようにすると秀丸担当さんが書かれているので、その部分
はもう対応待ちなだけ。
であれば、最初の文には当然含まれないはずですよね?
少なくとも私は、フォルダ/ファイルに対してスクリプト処理中に
別ウィンドウでその配下のフォルダ/ファイルに何かするような危険な行為をしよう
とは思いませんが。
ロックしたいという事は、間違って対象フォルダに対して操作をしてしまわないよう
にしたい
ということですよね?
スクリプト命令でlockFolder、unlockFolderを追加してもらえば済むかと思います。
フォルダのロックで他ソフトのアクセスを完全に禁止できるのかどうか知りませんが。


>ユーザーにとって価値があると考えているからのご相談です
あなたにとっては価値はあるかもしれませんが、
あなた以外からの要望がないという事は、
あなたにしか価値が無いことかもしれませんよね。
まぁそれは置いとくとして。

4.の部分は人それぞれにやりたいことが異なるので、ああいう書き方をしたのであっ
て、あなたがやりたい事がRenameReplaceならそれを書けばいいだけで、何が判らな
いのかが判らないです。
ちなみに、10441のjs:RenameReplace(" | T","");だとアクティブタブのフォルダ/
ファイルに対して実行されるので、
対象ファルダを表示しているタブでないとうまく動かないです。というかアクティブ
配下で一致してしまった思ってもいないファイル/フォルダに作用してしまうと思い
ます。
あとRenameReplaceを使うなら第3パラメタを指定しましょう。

で、フォルダのリネームについては、秀丸ファイラーはタブとフォルダが紐づいてい
るため、タブを移動する手順が必要になります。
私ならFileSystemObjectを使って自力でRenameするかな。エラー処理等大変ですが。
というか、そもそも当該フォルダのタブがアクティブでない状態で、そのフォルダに
対して何かを実行したいことは余りないですが。

RenameReplaceの使い方がよく判らないということならば、
名前の変更(置換)ダイアログを開いて入力する文字列を、RenameReplaceの引き数に
設定すればいいだけなので、
手動で納得のいく文字列が見つかるまで実行しましょう。
js:RenameReplace(" | T","");を見る限りでは、半角スペースと半角スペースの次
がTのフォルダからそれらの文字を取り除きたいようですが、
ファイラーの内部処理が判らないのではっきりとしたことは言えませんが、最初の半
角にマッチして取り除かれたら半角スペースTにマッチしない可能性がありますね。
書く順番逆にして上手くいくのかどうかもわかりませんが。

p.s.
この文章作ってたらmacさんがフォローしてくれてますね。ありがとうございます。

[ ]
RE:10448 Jスクリプトでファイル名置換処No.10452
秀丸担当 さん 22/10/31 10:03
 
対象フォルダを開いていなくても任意のタイミングで、ということについてコメント
しますと、HmFilerClassic.exeを別のところで起動して、/xオプションでスクリプト
を実行するといったことが考えられます。
ですがスクリプトといっても、ウィンドウありき、タブありき、ファイル一覧などの
項目ありきのことで、設定も影響しますし、バッチファイルのように見えないところ
で処理するようなことを想定したものではないです。
すでに行われているような、ウィンドウがあって手動操作しているところの手数を減
らす程度のものと考えてもらったほうがいいです。
もし確実性を求めるのであれば、設定が影響せず、ウィンドウやファイル一覧が無く
てもスクリプト単体でファイル処理するようなことが理想だと思います。
そういうこともできたらいいということで、参考にさせていただきます。

[ ]
RE:10451 Jスクリプトでファイル名置換処No.10471
jo さん 22/11/08 03:16
 
すごくどうでもいいコメントですね 読解力のなさをアピールされても
こまります ちゃんとどのスクリプトでなにをしたいかは
普通に理解できると思いますが・・ バックグランドの意味は

一例
別ソフトのランチャーに登録したスクリプトファイルをこのソフトで
呼び出して指定したフォルダに処理をかける

もしくはファイラーがフォアグラウンド中にスクリプトを呼び出すの
2種類しかありません バックグランドでこれくらいは想像してほしいです

>>少なくとも私は、フォルダ/ファイルに対してスクリプト処理中に
別ウィンドウでその配下のフォルダ/ファイルに何かするような危険な行為をしよう
とは思いませんが。

こんなことをしたいと一言も言ってません
このソフトの別ウインドウはなるべくなしという話であり
別のソフトであえてアクセスするようなことはしません
リスクはかいてます 万が一のためにロックシステムが
あったほうがよいのではという話を最初からしてますけど

>>あなたにしか価値が無いことかもしれませんよね。

大きなお世話ですね これまでバグ取りや機能の提案でも
結構いいものを提案して実装いただいてると思ってます
あなたはどうなんでしょうか? スペースキーモードが今の状態でなければ複数ファ
イル選択がとてもやりづらかったですからね
チェックボックスが小さすぎて誤操作連発してすごいストレスもありました

>>そもそも当該フォルダのタブがアクティブでない状態で、そのフォルダに対して何
>かを実行したいことは余りないですが。

バッチファイルで説明してます
ランチャーから任意のタイミングで外部呼びしたりPC起動終了時と絡めたりするとか
応用はききますね

毎回フォルダを開いてあるいはフォーカスして手動で
全選択してスクリプト呼び出す これをしないといけないのか?
スクリプトでまとめられないかという質問なんですよ

AHKショートカットキーで自動化すれば手間も少ないでしょうが
完全なバックグランドではなくファイラフォアグランドでの自動化処理まちにはなり
ますからね
ファイラーにこのような自動化をもとめるのが一般的かはわかりませんができるかど
うか不明だったので訪ねてみた次第です
あなたに想像力がないだけでしょう
私は効率よく労力や時間をかけないような方法論を素人なりに提案してるつもりです





>>リネームするフォルダを開いて選択していなくても
>>任意のタイミングでスクリプト指定する方法があれば教示ください
>この一文で
>
>>フォルダタブがロックされてようがタブでフォルダが開かれてなかろうが
>>指定したフォルダとその下の階層のリネームをファイラー操作ロックしないで実行
>したいのです
>>大量にファイルが有る場合 エクスプローラや他のファイラで
>>あるファイルを移動などしてしまえば処理に不都合がでるでしょう
>>
>>起きないようにこのソフトでそのフォルダないのファイル操作を処理中にバックグ
>ランドでロックしたほうがいいといってるんです
>>別タブと別ウインドウの違いくらいはよみとってもらえますか?
>これを読み取れる人は居ないと思いますが。
>上記文章からわかるのは、アクティブなタブから自分とは違うフォルダで、スクリ
>プトを使ったリネーム処理を、任意のタイミングで実行したいということだけです。
>
>
>また、操作ロックをしないようにすると秀丸担当さんが書かれているので、その部
>分はもう対応待ちなだけ。
>であれば、最初の文には当然含まれないはずですよね?
>少なくとも私は、フォルダ/ファイルに対してスクリプト処理中に
>別ウィンドウでその配下のフォルダ/ファイルに何かするような危険な行為をしよう
>とは思いませんが。
>ロックしたいという事は、間違って対象フォルダに対して操作をしてしまわないよ
>うにしたい
>ということですよね?
>スクリプト命令でlockFolder、unlockFolderを追加してもらえば済むかと思います。
>フォルダのロックで他ソフトのアクセスを完全に禁止できるのかどうか知りませんが。
>
>
>>ユーザーにとって価値があると考えているからのご相談です
>あなたにとっては価値はあるかもしれませんが、
>あなた以外からの要望がないという事は、
>あなたにしか価値が無いことかもしれませんよね。
>まぁそれは置いとくとして。
>
>4.の部分は人それぞれにやりたいことが異なるので、ああいう書き方をしたのであ
>って、あなたがやりたい事がRenameReplaceならそれを書けばいいだけで、何が判ら
>ないのかが判らないです。
>ちなみに、10441のjs:RenameReplace(" | T","");だとアクティブタブのフォルダ
>/ファイルに対して実行されるので、
>対象ファルダを表示しているタブでないとうまく動かないです。というかアクティ
>ブ配下で一致してしまった思ってもいないファイル/フォルダに作用してしまうと
>思います。
>あとRenameReplaceを使うなら第3パラメタを指定しましょう。
>
>で、フォルダのリネームについては、秀丸ファイラーはタブとフォルダが紐づいて
>いるため、タブを移動する手順が必要になります。
>私ならFileSystemObjectを使って自力でRenameするかな。エラー処理等大変ですが。
>というか、そもそも当該フォルダのタブがアクティブでない状態で、そのフォルダ
>に対して何かを実行したいことは余りないですが。
>
>RenameReplaceの使い方がよく判らないということならば、
>名前の変更(置換)ダイアログを開いて入力する文字列を、RenameReplaceの引き数に
>設定すればいいだけなので、
>手動で納得のいく文字列が見つかるまで実行しましょう。
>js:RenameReplace(" | T","");を見る限りでは、半角スペースと半角スペースの次
>がTのフォルダからそれらの文字を取り除きたいようですが、
>ファイラーの内部処理が判らないのではっきりとしたことは言えませんが、最初の
>半角にマッチして取り除かれたら半角スペースTにマッチしない可能性がありますね。
>書く順番逆にして上手くいくのかどうかもわかりませんが。
>
>p.s.
>この文章作ってたらmacさんがフォローしてくれてますね。ありがとうございます。

[ ]