HmFiler_同じ名前のフォルダを作成してそNo.11472
tomato さん 25/03/05 15:42
 
題記のスクリプトを実行した時に期待しているように動作しません。

・スクリプトを実行する時に条件
(1)下記2つのファイルを用意する。
test.vbs
test.vbs.BAK001
(2)「test.vbs.BAK001」を選択してHmFiler_同じ名前のフォルダを作成してその配下
に移動.jsを実行する
(3)「test.vbs$$$(folder)」というフォルダができて「test.vbs.BAK001」が「test.
vbs$$$(folder)」フォルダに移動する

私は「test.vbs」という名前のフォルダができてそこに「test.vbs.BAK001」が移動
すると思っていました。
この動作は、仕様なのでしょうか?
個人的にバックアップファイルが沢山出来たら一時的に
フォルダに移動させたかったのですが。
よろしくお願いします。



[ ]
RE:11472 HmFiler_同じ名前のフォルダを作No.11473
秀まるお さん 25/03/05 16:54
 
スクリプトを作った者なのでお返事させていただきます。

まず、スクリプトの動作としては意図した動作をしてるつもりではありました。しか
し、フォルダ名の変更に失敗してるようです。

例えば「test.vbs」ってファイルを選択して実行したら、「test」って名前のフォル
ダを作ってそこに移動しようとします。今回のケースは「test.vbs.BAK001」ってフ
ァイル名なので、この場合はファイルの拡張子と思わしき「.BAK001」を省いた「tes
t.vbs」って名前のフォルダを作成しようとするんですが、それと同じ名前のファイ
ルが既に別に存在してるために、そのフォルダが作成できなくて、誤動作してるよう
でした。

作成できない場合、「test.vbs$$$(folder)」みたいな名前のフォルダになってしま
うようです。

> 私は「test.vbs」という名前のフォルダができてそこに「test.vbs.BAK001」が移
>動すると思っていました。

「test.vbs」の同じ名前のファイルが既にあるので、そういう風に動作させることは
不可能になります。

何か別の、ご希望の動作があれば教えて欲しいです。例えば「test.vbs.BAK001」っ
て名前のフォルダを作ってそこに移動するとかなら出来ますけども。例えば「test.v
bs」フォルダを生成しようとして失敗したらそっちにする、みたいには出来ると思い
ます。

[ ]
RE:11473 HmFiler_同じ名前のフォルダを作No.11474
秀まるお さん 25/03/05 17:04
 
とりあえず、「作成予定のフォルダ名と同じ名前のファイルなりフォルダなりが既に
あった場合は、拡張子付きの名前でフォルダ作成する」みたいなスクリプトの例は出
来ました。

45行目付近にある

    var newFolderPath2 = newFolderPath1 + "$$$(folder)";        //一時的に別
の名前のフォルダにする。

の次に、以下の内容を挿入します。


    if( objFso.FileExists( newFolderPath1 ) ) {
        baseName = fileName;
        newFolderPath1 = filePath.match(/^.*(?=\\[^\\]+)/) + "\\" + baseName;
    }

この作戦か、他に何かいい案があれば教えて欲しいです。

[ ]
RE:11474 HmFiler_同じ名前のフォルダを作No.11476
tomato さん 25/03/05 23:32
 
>この作戦か、他に何かいい案があれば教えて欲しいです。
秀まるおさんの作戦で試したのですが、
今度は、作成したフォルダの中のファイルを元の位置に戻そうとしたら
Windowsの方から同じ名前のフォルダがあるので移動できませんと
エラーというか警告がありました。
その為、同じ名前のファイルとフォルダは使用しない方向で考えました。
秀まるおさんからのソースコードも少し変更しました。

44と45行目をコメントに変更
// var newFolderPath1 = filePath.match(/^.*(?=\\[^\\]+)/) + "\\" + baseName;
// var newFolderPath2 = newFolderPath1 + "$$$(folder)";  //一時的に別の名前
のフォルダにする。

61と62行目の間に下記を追加しました。
if( question( strMessage ) ) {
 objFso.CreateFolder( newFolderPath2 );
上記2行の間です。
==================
 if( question( strMessage ) ) {
  newFolderPath1 = filePath.match(/^.*(?=\\[^\\]+)/) + "\\" + baseName;
  newFolderPath2 = newFolderPath1 + "$$$(folder)";  //一時的に別の名前のフォ
ルダにする。
  while(1)
  {
   if( objFso.FileExists( newFolderPath1 ) )
   {
    baseName = input( "同名のファイルが存在します。新しいフォルダ名を作成し
てください。", "");
    if(baseName == undefined || baseName == "")
    {
     return false;
    }
    newFolderPath1 = filePath.match(/^.*(?=\\[^\\]+)/) + "\\" + baseName;
   }
   else
   {
    break;
   }
  }
  objFso.CreateFolder( newFolderPath2 );
==================
これを自分で追加して解決しました。

秀まるおさん、色々とありがとうございました。

[ ]
RE:11476 HmFiler_同じ名前のフォルダを作No.11477
秀まるお さん 25/03/06 09:41
 
スクリプトの改造例を教えていただきありがとうございます。

連絡いただいたスクリプトから1行だけ僕がいいと思うように変更してライブラリの
方にアップロードしなおしさせていただきます。

    baseName = input( "同名のファイルが存在します。新しいフォルダ名を作成し
てください。", "");

の所は僕的には

    baseName = input( "同名のファイルが存在します。別のフォルダ名を指定して
ください。", baseName + "-folder" );

にします。

[ ]
RE:11477 HmFiler_同じ名前のフォルダを作No.11481
tomato さん 25/03/06 13:40
 
>スクリプトの改造例を教えていただきありがとうございます。
> ......
>にします。

秀まるおさんの方がいいと思います。
ありがとうございます。

[ ]