【要望】名前の変更(置換)についてNo.03787
Suezo さん 13/01/29 10:08
 
いつも便利に使用させてもらっています。
名前の変更(置換)について1点要望があります。

ワイルドカード(*/?)を使用したファイル名の一括置換を行いたいです。

ファイル名が 「特定の文字列+ユニークNo+名称+日付.log」の
ようなファイル名で「特定の文字列+ユニークNo」を消したいような場合

例:AA123456_Test_130129.Logを「AA*_」又は「AA??????_」 を検索文字列、
  置換文字列を「空欄」として実行し Test_130129.Log としたい。

以上、検討よろしくお願いします。

[ ]
RE:03787 【要望】名前の変更(置換)につNo.03788
秀丸担当 さん 13/01/29 14:45
 

>いつも便利に使用させてもらっています。
>名前の変更(置換)について1点要望があります。
>
>ワイルドカード(*/?)を使用したファイル名の一括置換を行いたいです。

名前の変更(置換)で、より高度な置換もできたら便利だと思います。
もしやるとしたら、ワイルドカードよりも正規表現のほうがいいかもしれません。
できたらいいということでネタにさせていただきます。

現状でやるとしたら、Makkieさんの作られた複数のファイル名を一括修正するス
クリプトを使うとできると思います。
http://hide.maruo.co.jp/lib/hmfcscript/renamefiles2.html

[ ]
RE:03788 【要望】名前の変更(置換)につNo.03789
Suezo さん 13/01/29 17:22
 
>名前の変更(置換)で、より高度な置換もできたら便利だと思います。
>もしやるとしたら、ワイルドカードよりも正規表現のほうがいいかもしれません。
>できたらいいということでネタにさせていただきます。

よろしくお願いします。

>現状でやるとしたら、Makkieさんの作られた複数のファイル名を一括修正するス
>クリプトを使うとできると思います。
>http://hide.maruo.co.jp/lib/hmfcscript/renamefiles2.html

回答ありがとうございます。
便利なスクリプトがあったんですね。

で、このスクリプトですが、そのままで普通に動きますでしょうか?

私の環境だとエラーが出てそのままでは動作しませんでした。
秀丸エディタがあるPathが C:\Program Files\Hidemaru\Hidemaru.exe なので空白を
含むPathということでPathを "" で括らないとスクリプト
エラーになってしまいます。(XP 32Bit/Win7 32Bit で確認)
スクリプトを変更することで動作しました。

[ ]
RE:03789 【要望】名前の変更(置換)につNo.03790
秀丸担当 さん 13/01/30 10:07
 

>で、このスクリプトですが、そのままで普通に動きますでしょうか?
>
>私の環境だとエラーが出てそのままでは動作しませんでした。
>秀丸エディタがあるPathが C:\Program Files\Hidemaru\Hidemaru.exe なので空白を
>含むPathということでPathを "" で括らないとスクリプト
>エラーになってしまいます。(XP 32Bit/Win7 32Bit で確認)
>スクリプトを変更することで動作しました。

確かに秀丸エディタのパスが空白を含むパスの場合うまくいかないようです。
言われているように修正する必要があるようです。


[ ]
RE:03790 【要望】名前の変更(置換)につNo.03792
Suezo さん 13/01/31 16:31
 
もう1点アドバイスお願いします。

このスクリプトが Win7の64Bit版だと
「オートメーションサーバーはオブジェクトを作成できません。」の
エラーで動作しません。

スクリプト内で呼び出しているvbscriptが64Bit版(C:\Windows\System32\wscript.e
xe)だから
だと思うのですが、スクリプト内で明示的に32Bit版(C:\Windows\SysWOW64\wscript.
exe)を
使うような記述はできますでしょうか?

以上、よろしくお願いします。

[ ]
RE:03792 【要望】名前の変更(置換)につNo.03793
秀丸担当 さん 13/01/31 17:31
 

確かに64bit版ではそういうエラーが出てしまうようです。

MSScriptControl.ScriptControlというオブジェクトは、64bit版は無いためのよ
うです。
スクリプトはwscript.exeではなく、hmfilerclassic.exeの上で動いているので、
32bit版のwscript.exeを呼ぶといったようなことはできません。

このオブジェクトはvbsのMsgBoxを使うためだけの目的のようで、Messageと
Questionメソッドに置き換えてやるとなんとかなるのではないかと思います。


以下は修正例です。

//var vbCL           = "\" & vbCrLf & \"";
//var vbCL2          = "\" & vbCrLf &  vbCrLf & \"";
var vbCL           = "\n";
var vbCL2          = "\n\n";
//----------------------------------------------------------------------
//var objMSSC = new ActiveXObject( "MSScriptControl.ScriptControl" );
//objMSSC.Language = "vbscript";
function MsgBox( strPrompt, intButtons ) {
  if( (intButtons & 0x07) == vbRetryCancel ) {
    if(Question( strPrompt )!=0){
        return vbRetry;
    }
    return vbCancel;
  } else if( (intButtons & 0x07) == vbRetryCancel ) {
    if(Question( strPrompt )!=0){
        return vbYes;
    }
    return vbNo;
  }
  Message( strPrompt );
  return vbOK;
  //objMSSC.addCode( "function vbFunc() vbFunc = MsgBox(\"" +
  //  strPrompt + "\",\"" + intButtons +
  //  "\",\"Script : RenameFiles2\" ) end function" );
  //return objMSSC.eval( "vbFunc" );
}

[ ]
RE:03793 【要望】名前の変更(置換)につNo.03794
Suezo さん 13/01/31 18:43
 
>スクリプトはwscript.exeではなく、hmfilerclassic.exeの上で動いているので、
>32bit版のwscript.exeを呼ぶといったようなことはできません。

了解しました。


>以下は修正例です。

素早い回答ありがとうございした。
動作するようになりました。

このスクリプトですが、秀丸エディタで編集するので不要な箇所を
削除するだけならBox選択が使えるのでわざわざ置換する必要がなく
とても便利ですね。

[ ]
RE:03794 【要望】名前の変更(置換)につNo.03797
秀丸担当 さん 13/02/01 10:09
 

修正案ですが1つ間違っていました。
vbRetryCancelを2回判定してしまっていて2回目はvbYesNoとしておく必要があ
りました。
失礼しました。
もう一回書いておきます。

//var vbCL           = "\" & vbCrLf & \"";
//var vbCL2          = "\" & vbCrLf &  vbCrLf & \"";
var vbCL           = "\n";
var vbCL2          = "\n\n";

//----------------------------------------------------------------------
//var objMSSC      = new ActiveXObject( "MSScriptControl.ScriptControl"
 );
//objMSSC.Language = "vbscript";
function MsgBox( strPrompt, intButtons ) {
  if( (intButtons & 0x07) == vbRetryCancel ) {
    if(Question( strPrompt )!=0){
        return vbRetry;
    }
    return vbCancel;
  } else if( (intButtons & 0x07) == vbYesNo ) {
    if(Question( strPrompt )!=0){
        return vbYes;
    }
    return vbNo;
  }
  Message( strPrompt );
  return vbOK;
  //objMSSC.addCode( "function vbFunc() vbFunc = MsgBox(\"" +
  //  strPrompt + "\",\"" + intButtons +
  //  "\",\"Script : RenameFiles2\" ) end function" );
  //return objMSSC.eval( "vbFunc" );
}


ちなみにこれはMsgBoxの一部をQuestionで「はい」「いいえ」だけで代用してい
て、完全にMsgBoxを補ってはいないです。

そもそもjsにMsgBoxが無いのが不便で、vbsのMsgBoxも単なるWindowsAPIの
MessageBoxのラッパーのようで、単純なものだと思います。
秀丸ファイラーClassic自身が持つMessageメソッドを、vbsのMsgBoxと同じよう
に第二パラメータを扱えるようにするのは簡単なので、それも対応するようにし
ようと思います。

[ ]