ファイル名を規則にしたがって変更するソフトで、ファイルの入っているフォルダ名をファイル名の先頭につける変更を行い、さらに、そのフォルダをなくしてファイルの置いてある階層をひとつ上に上げることができるソフトがあればお教えください。また、できればその逆(ファイル名の先頭数文字の名前のフォルダを生成してそこにそのフォルダ名の部分を除いた名前のファイルが生成される)もできると助かります。ファイルの整理に便利だと思うのですが。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/12/20 20:32:23
  • 終了:2007/12/27 20:35:02

回答(1件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492007/12/27 03:01:56

ポイント10pt

WSHで作ってみました(まだ回答がなかったようですので)。


●使い方

  1. 下のスクリプトをRenFile.vbsのように拡張子.vbsで保存する
  2. エクスプローラからディレクトリを選んでRenFile.vbsへドラッグする(いくつでもOKです。ただし、親子になっているものは不可)
  3. 下位フォルダも含めて<フォルダ名>ファイル名にリネームされて、フォルダは全部消えます。もし、XXXフォルダ-AAAフォルダ-BBBフォルダ-c.docがあってAAAをドラッグすると、XXXフォルダにAAABBBc.docができます。
  4. ファイル移動やフォルダ削除は怖いので、動作確認用にメッセージを表示しています。動作に安心したら、「'怖いので」の行を削除ください。もし、試験段階でダイアログが出ている最中に止めたいときは、Ctrl+Alt+Delでタスクマネージャからwscript.exeをプロセスの終了で終わらせてください。
Option Explicit
'フォルダ名をつけてファイルを上位へ移動する(再帰)
'フォルダは削除する
Dim strArg

For Each strArg In Wscript.Arguments
    Call MoveUpperFolder(strArg)
Next

Sub MoveUpperFolder(strFolder)

    Dim objFSO, objFolder, objFile, objSubF
    Dim vWork, sFolderName
    
    Wscript.echo strFolder & "の処理"		'怖いので
    Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strFolder)
    vWork = Split(strFolder, "\")
    sFolderName = vWork(UBound(vWork))
    
    'フォルダがあったら先ずフォルダ内ファイルを上位へ移動
    For Each objSubF In objFolder.SubFolders
        Call MoveUpperFolder(objSubF.Path)
    Next
    
    'ファイルは上位フォルダへ移動
    For Each objFile In objFolder.Files
        Wscript.echo "MoveTo:" & objFolder.ParentFolder.Path & "\" _
          & sFolderName & objFile.Name		'怖いので
        objFile.Move objFolder.ParentFolder.Path _
          & "\" & sFolderName & objFile.Name
    Next
    Wscript.echo "rd:" & objFolder.Path		'怖いので
    objFolder.Delete
    
    Set objSubF = Nothing
    Set objFile = Nothing
    Set objFolder = Nothing
    Set objFSO = Nothing

End Sub

なお、戻しのほうは、どこでフォルダ名と判定するのかが判定困難なのでちょっとできないかなぁ。。。


●WSHの紹介

http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01.html

  • id:fuentebella
    環境はWindowsですか? Linux系?
  • id:sterna
    あ、すみませんWinXpですが、cygwinで動くようななんかのスクリプトでもいいです。
  • id:ardarim
    WSHでちょっとしたスクリプトでできます。(20~30行くらい?)
    暇ができたら回答してみます。
  • id:sterna
    お時間のあるときでよいのでいただけると助かります。どうぞよろしくお願いします。
  • id:airplant
    WSHで作ってみましたので、使ってみてください。
    フォルダの中にフォルダがある場合も同じ動作になるようにしましたが、もしかしたらオーバースペックだったかも。コメント含め40行でした。
  • id:sterna
    ありがとうございます。年末締め切りの仕事がはいってしまい、終了のときにオープンできずすみませんでした。終了後に配分できると良かったのですが、ポイント送信でお送りします。自動再質問とかそういうのなくなっちゃったんですかね?
  • id:airplant
    ポイント送信ありがとうございました。
    要望のことがうまくできましたでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません