• ベストアンサー

フォルダー名の複雑な変更

例えば、フォルダー名が Songbirds - 機関車 (1995) jpPop Nodubut - Ten Day(2003) を 1995 Songbirds - 機関車 (1995) jpPop 2003 Nodubut - Ten Day(2003) のように()内の4桁の数値と半角のスペースをフォルダー名の最前列に追加した形式でフォルダー名を変更できますか? -------------------- 以前教えてもらった『お~瑠璃ねーむ』のマクロ機能では、処理が複雑で出来ないようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

VBScriptを使ってフォルダ名の変更を行います。 メモ帳を開いて下記をコピーしてデスクトップにTest.vbs 名で保存してください。 Option Explicit Dim objFSO Dim args Dim newName Dim f1, fol Set args = WScript.Arguments If args.Count < 1 Then WScript.Quit Set objFSO = CreateObject("Scripting.FileSystemObject") For Each f1 in args set fol = objFSO.GetFolder(f1) newName = GetnewFName(fol.Name) If newName <> "" Then fol.Name = newName End If Next Set objFSO = Nothing Function GetnewFName(strName) Dim objRE Dim myMatches Dim strYear Set objRE = CreateObject("VBScript.RegExp") objRE.Pattern = "\(\d{4}\)" Set myMatches = objRE.Execute(strName) If myMatches.Count > 0 Then strYear = Mid(myMatches(0).Value, 2, 4) GetnewFName = strYear & " " & strName End If Set objRE = Nothing End Function 実行は作成したTest.vbs ファイルに該当のフォルダを ドラッグ&ドロップすると変更が行われます。

NuboChan
質問者

お礼

watabe007さん、  完璧なVBスクリプトの提示ありがとうございます。 サンプルフォルダーを利用したテストで思うような結果になりました。 VBスクリプトは、Visual Basic の構文にすごく似ていますね。 バッチのように処理ができるので大変便利で有効に利用させていただきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.8

>この2回OKを押す処理を無くして処理が完結するようには出来ませんか? これは、動きを実感してもらいたく書き込んだコードです。  ' MsgBox (fl.Name)  ' MsgBox (GetNewDir(fl.Name)) としてコメントアウトするか、 行削除して使ってください。

NuboChan
質問者

お礼

何度もありがとうございます。 メッセージボックスを表示しないようにコメントアウトするだけで処理は進みました。 (簡単な事まで全く忘れていました。) せっかくなので最後に下記を書き加えてマクロが終了したのを表示するようにしました。   MsgBox "処理が終了しました。", vbOKOnly + vbinformation, "音楽フォルダー(先頭に西暦付加)" 最後までお付き合い願いありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.7

>しかし、2つとも >   コンパイルエラー >     ユーザー定義型は定義されていません。 >とエラーが出ます。 ごめんなさい。 参照設定が必要です。 https://www.tipsfound.com/vba/18001 がわかりやすいと思います。

NuboChan
質問者

お礼

HohoPapaさん、アドバイスありがとうございます。 FileSystemObjectが使えるように   [Microsoft Scripting Runtime] をライブラリ登録をする必要があったのですね。 おかげさまで希望の処理が出来ましたが、   マクロを起動すると処理フォルダ一つに付き2回ダイアログが出て     OKをクリックしなと変名処理が完結しない仕様になっています。   (Module1に記載したコードには、OKをチェックするようなコードが無いと思います。)   この2回OKを押す処理を無くして処理が完結するようには出来ませんか?     (処理フォルダーの数が多い場合は単純にOKを何度もクリックする事になります。)

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.5

>このスクリプトは、EXCELのVBA_Editorを開いてどこに記載すれば良いでしょうか? >また、利用するにはどうすれば良いでしょうか? >   (出来れば具体的な事例で説明願えれば幸いです。 私の提示したコードは EXCELのVBAです。 標準モジュールに配置します。 >例えば、O:\extractedに下記フォルダーを配置して処理する場合など。) ということであれば、 Set pfl = fso.GetFolder("D:\work\") ' 親フォルダを取得 この行を Set pfl = fso.GetFolder("O:\extracted\") と書き換えて使うことになります。 "O:\extracted\" このフォルダーの直下にあるフォルダー群を全数調べ、 提示の条件にあるフォルダーがあれば、 そのフォルダー名を全数変更する動作となります。 つまり、 変更対象とはならないフォルダーが含まれていた場合 それは無視する動作をします。

NuboChan
質問者

お礼

HohoPapaさん、追加のアドバイスありがとうございます。 添付図のようにExcelのVBAの標準モジュールにコードをコピペして 仮名(Book1.xsm)で保存しました。 Moduleを実行するのに下記の2つの方法を実施しました。 1)ツール>マクロから    マクロ名(DirChangMain)を実行 2)実行>Sub/ユーザーフォームの実行 しかし、2つとも    コンパイルエラー      ユーザー定義型は定義されていません。 とエラーが出ます。   (Dim fso as FileSystemObject) !!! ---------------- 何か?  私が根本的なところで間違えているようですが、エラーが出る原因は何でしょうか?  

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.4

>のように()内の4桁の数値 4桁固定なことを見落としていました。 Functionをちょっと直します。 Function GetNewDir(IDirName As String) As String  Dim sPos As Integer  Dim ePos As Integer  Dim NumText As String    GetNewDir = IDirName    sPos = InStr(IDirName, "(")  If sPos = 0 Then Exit Function          '(が無い    ePos = InStr(IDirName, ")")  If ePos = 0 Then Exit Function          ')が無い  If ePos <= sPos Then Exit Function        '()の位置が逆転    NumText = Mid(IDirName, sPos + 1, ePos - sPos - 1)  If Len(NumText) <> 4 Then Exit Function     '()内が4文字以外  If IsNumeric(NumText) = False Then Exit Function '()内が数値以外    GetNewDir = NumText & " " & IDirName End Function

NuboChan
質問者

お礼

レスありがとうございます。 VBAは、むかしEXCELで少し利用していましたが、ここ数年利用することが無くすっかり忘れてしまいました。 このスクリプトは、EXCELのVBA_Editorを開いてどこに記載すれば良いでしょうか? また、利用するにはどうすれば良いでしょうか?   (出来れば具体的な事例で説明願えれば幸いです。  例えば、O:\extractedに下記フォルダーを配置して処理する場合など。)  Terry Oldfield - Guardian Angel (2014)  Terry Oldfield - Sacred Touch (2009)  Terry Oldfield - Temple Moon (2017)  Terry Oldfield - The Best Of Terry Oldfield (2018)  Terry Oldfield Nonstop (2018) 基本的な質問でお世話をおけしてすいません。

全文を見る
すると、全ての回答が全文表示されます。
  • kteds
  • ベストアンサー率42% (1877/4428)
回答No.3

Powershell での例を参考までに。 対象フォルダはf:\temp-testフォルダ内にあるとした例です。 自分で任意に設定してください。 $folder="f:\temp-test" $name_org=(Get-Childitem $folder).name $name_new=foreach($i in $name_org){$i.substring($i.indexof("(")+1,4) + " " + $i} $k=0;foreach($j in $name_org){Rename-item $folder\$j $name_new[$k];$k=+1}

NuboChan
質問者

お礼

レス有難うございます。  スクリプトの提示感謝します。 早速、提示されたスクリプトでテストしてみました。 O:\extractedに下記フォルダーを配置しました。  Terry Oldfield - Guardian Angel (2014)  Terry Oldfield - Sacred Touch (2009)  Terry Oldfield - Temple Moon (2017)  Terry Oldfield - The Best Of Terry Oldfield (2018)  Terry Oldfield Nonstop (2018) .batファイルならほんの少し理解しているのですがpowershellについては全くの門外漢です。 ネットの情報(powershell入門編)を参考に下記のバッチ(ReName_Song.bat)を作成して起動しました。 ReName_Song.bat powershell -ExecutionPolicy RemoteSigned -File C:\Users\Nubo\Desktop\ReName_Song.ps1 pause ReName_Song.ps1 $folder="O:\extracted" $name_org=(Get-Childitem $folder).name $name_new=foreach($i in $name_org){$i.substring($i.indexof("(")+1,4) + " " + $i} $k=0;foreach($j in $name_org){Rename-item $folder\$j $name_new[$k];$k=+1} 下記のように5つの内2つは、思ったような結果が出ましたが  2014 Terry Oldfield - Guardian Angel (2014)  2009 Terry Oldfield - Sacred Touch (2009) 後の3つは、処理されずにpoweshellでエラーが出ました。 エラーの原因がわからないのですが、   スクリプトの修正が必要なら教えて下さい。 又、

全文を見る
すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>()内の4桁の数値と半角のスペースをフォルダー名の最前列に追加した形式 参考に Sub Test()   Dim objRE As Object   Dim myMatches As Object   Dim strFName As String, newFName As String   Dim strYear As String   strFName = "Songbirds - 機関車 (1995) jpPop"   Set objRE = CreateObject("VBScript.RegExp")   objRE.Pattern = "\(\d{4}\)"   Set myMatches = objRE.Execute(strFName)     If myMatches.Count < 1 Then Exit Sub   strYear = Mid(myMatches(0).Value, 2, 4)   newFName = strYear & " " & strFName   MsgBox newFName End Sub

NuboChan
質問者

お礼

レス有難うございます。 提示いただいたスクリプトはVB(VBA)だと思うのですが? 又、記載中に  strFName = "Songbirds - 機関車 (1995) jpPop" とあるのですが、 対象フォルダー名は、任意なので素人ながら”Songbirds -”では固定されているようで 汎用になるのでしょうか? 提示いただいたスクリプトは、あくまでサンプルでサンプルを利用して  後は当事者(私)が修正をするようなスクリプトですか?

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

VBAでよければ、次のようなコードでいかがでしょうか。 Option Explicit Sub DirChangeMain()  Dim fso As FileSystemObject  Dim pfl As Folder  Dim fl As Folder    Set fso = New FileSystemObject ' インスタンス化  Set pfl = fso.GetFolder("D:\work\") ' 親フォルダを取得  For Each fl In pfl.SubFolders ' サブフォルダの一覧を取得      MsgBox (fl.Name)   MsgBox (GetNewDir(fl.Name))     If fl.Name <> GetNewDir(fl.Name) Then    fl.Name = GetNewDir(fl.Name)   End If    Next End Sub Function GetNewDir(IDirName As String) As String  Dim sPos As Integer  Dim ePos As Integer  Dim NumText As String    GetNewDir = IDirName    sPos = InStr(IDirName, "(")  If sPos = 0 Then Exit Function          '(が無い    ePos = InStr(IDirName, ")")  If ePos = 0 Then Exit Function          ')が無い  If ePos <= sPos Then Exit Function        '()の位置が逆転    NumText = Mid(IDirName, sPos + 1, ePos - sPos - 1)  If NumText = "" Then Exit Function        '()内がNull  If IsNumeric(NumText) = False Then Exit Function '()内が数値以外    GetNewDir = NumText & " " & IDirName End Function

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • フォルダー名の複雑な変更(3)

    下記でフォルダー名の変更をVBSで処理する方法を教えてもらいました。 フォルダー名の複雑な変更 https://okwave.jp/qa/q9521359.html フォルダー名の複雑な変更 (2) https://okwave.jp/qa/q9522907.html 昨日、デスクトップにあるスクリプト(VBS)にフォルダーをドラッグ&ドロップで  対象フォルダー(Unicode文字は無い)を処理させたのですがエラーが出るようになりました。 (以前は、問題なく処理されてエラーは出ていませんでした。) エラー処理をお願いしようかとも思いましたが、  色々考慮の結果、新規にスクリプトをお願いする事にしました。 ------------------------------------------------------------- Unicode文字を削除>置き換え、末尾の不要文字を削除するなど  事前処理を『お~瑠璃ね~む』で行った対象フォルダーをターゲットにするように   加工しました。 この加工済みのターゲットフォルダー名を  下記の条件で変名できるスクリプト(VBS)を教えて下さい。  条件 :   フォルダー名の末尾6文字+半角スペースを       フォルダーの最初に移動して変名する。   例えば、     平成25年更新(2013) を     (2013) 平成25年更新 に変名する。

  • Excel VBA で フォルダ名の一部を一括変更(セルの値を取得して変更)

    こんにちは。例を挙げます。よろしくお願いします。 まず、"ABC" という名前のフォルダがあるとします。 この"ABC"の中に、"00_あいうえお"というフォルダがあるとします。 ほかにも同じようなフォルダ:"10_かきくけこさ123"、"01_しす45せそたち"、"67_つてと"があります。これらのフォルダ名には特徴があり、2桁の半角数字に始まり、半角アンダーバー、文字列という並びになっています。 さらに同じフォルダ"ABC"に、EXCELファイル"なにぬ89.xls"もあるとしましょう。 したがって今、フォルダ"ABC"には、4つのフォルダと1つのEXCELファイルがあります。 "なにぬ89.xls"の、セルA1には"1"、A6には"2"、A11,A16は"34","57"と数値が入っているとします。また、セルB3には"あいう"、B8には"かき"、B13には"しす4"、B18には"つてと"という文字列が入っています。 B3,B8,B13,B18の文字列は、必ず同じフォルダ"ABC"内のフォルダ名に含まれています。 マクロで行いたい内容:フォルダ名の左端の2桁の数字を置換する その詳細: "なにぬ89.xls"のセルB3の文字列"あいう"を含むフォルダ"00_あいうえお"のフォルダ名の2桁の数字"00"のうち、右の"0"だけ、セルA1の数値"1"に置換したいのです。("00_あいうえお"→"01_あいうえお"へフォルダ名置換) 同じように、セルB8の"かき"を含むフォルダ"10_かきくけこさ123"の名前も、セルA5の数値"2"をもとに置換したいのですが、今度は2桁の数字が"02"になってほしいのです。("10_かきくけこさ123"→"02_かきくけこさ123"へフォルダ名置換) 以上のことをふまえますと、 フォルダ名"01_しす45せそたち" は "34_しす45せそたち" "67_つてと" は "57_つてと" に変換したいということがお分かりいただけますでしょうか。 4つの例しかあげませんでしたが、実際の"なにぬ89.xls"にはもっとたくさんのデータが、5行おきに並んでいます。他のセルには無関係の文字列や空白などが入っています。 セルの値でフォルダ名を部分一致検索し、セルの値でそのフォルダ名を置換する、ということができるでしょうか? 説明が長くなりましたが、ご回答、お待ちしております。よろしくお願いいたします。

  • フォルダ名の変更ソフト

    写真が入ったフォルダがたくさんあり、フォルダ名は日付になっています。 この各フォルダの中身を見て、これはスポーツだ、これは旅行だ、・・・・という風に後からも簡単に分かるように、フォルダ名を日付+スペース+スポーツ、・・・・と、フォルダ名にスペースとカテゴリーを追加したいと思っています。 例えば、フォルダを右クリックすると、スポーツ、旅行、・・・・・とメニューが出てきて、それらから該当のものを選ぶと、フォルダ名が自動で変更される。 こんな便利なソフトはないでしょうか?

  • 複数のフォルダ名を一括変更したい

    写真を保存しているフォルダのフォルダ名を一括変更する方法があれば教えてください。 「20180907 新宿区 ●●マンション」という感じにファイル名をつけたフォルダが複数あります。 フォルダ名を「●●マンション 20180907 新宿区」のような感じに変更したいのですが、数がかなりあるので、一括で変更できる方法はないでしょうか?? フォルダ名を入力した人が色々なので、順番は統一されているのですが、スペースは人によって半角だったり全角だったりなかったりします。 フォルダ名を一括で変更出来るソフトは「Namely」や「FlexRenamer」などあるのですが、先頭から何桁か削除することが出来ても、先頭の文字列を切り取って末尾に付けるような機能はないようです。 出来ればタイムスタンプも変わらないとなお良いのですが、文字列や数もバラバラですし、むりでしょうか? 良い方法があれば教えてください。よろしくお願いします。

  • フォルダ名について

    フォルダ名を半角英字の大文字にしようとすると、リターンキーで確定したときに、最初の一文字目以外大文字から小文字に勝手に変わってしまいます(スペースで区切ったりすると大文字で確定させることはなんとかできます)。 フォルダ名をすべてを大文字にすることはできないのでしょうか? 簡単な質問ですいませんが、教えてください。よろしくお願いします。 ちなみにOSはWindows98です。

  • ファイル名・フォルダー名について

    ファイル名・フォルダー名について XPのSP3を使用しております。 今回、HDDの整理をかねて、音楽ファイルの整理に取り組んでおります。 そこで早速ですが、ファイル名やフォルダー名のつけ方についてお聞かせ頂きたいのです。 自分なりに調べてみましたら、これらの命名規則としては 「半角スペース」は使用せず、「半角アンダースコア」なり「半角ハイフン」を使用する・・・ といった記事を多く目にしてきました。 OS間の互換性、WEB上での問題などが理由である事も知りえた上で、 マクロソフト社のサポートにも尋ねてみたところ、 「殊、フォルダーに関してはあまり深い階層を設けない限り、(禁止文字以外の)半角記号の使用には問題がないと思われます」との回答を頂き、初心者の私においては、 実際はどっちなのだろかと幾分疑問に感じ、こちらにお邪魔させて頂く事にしました。 質問の要点をまとめますと、 ・ネット上にファイルをアップしたりのWEB経由の予定はなく完全な個人使用の範囲 ・今後OSをXPからVISTAなりセブンなりに乗り換えた場合の互換性の問題 ・あるいは新設したHDDへの移動後の問題 これらを前提にやはり半角スペースは避けて、アンダースコアやハイフン、あるいは半角括弧などで連続した文字列で構成しておくべきなのでしょうか? (「半角ドット」や「半角の中点」の可否についてもお聞かせください。) という事です。 実際、特にアンダースコアなどは使い慣れていないせいか、どうも見づらく、また、今後の環境も考慮して事前にお尋ねさせて頂く次第です。 また、参考までに、皆様のとられている命名の仕方などもお聞かせ下さると、尚ありがたく思います。 このような初歩的な事柄にお付き合い頂く事は大変恐縮なのですが、有益なご指南を頂ければ幸いであります。 どうかよろしくお願い致します。

  • フォルダ(ファイル)名を英数に変更できません。

    OS X を使っています。 突然フォルダの名前が、英数にできなくなってしまいました。 新規フォルダの名前を英数で入力しようと思って「英数」キーを押すと、 半角のスペースが増えるだけで英数モードにならないんです。 今まで英語で名前をつけていたフォルダの名前を変更しようとしても、 日本語になってしまいます………。 ファイル名を変更しようとしても、同じような現象がおこっています。 ソフトから「保存」をすれば、英数のファイル名をつけることは可能です。 いったい何がおこっているんでしょう? そして、どうしたら解決できますか? どうしたらいいのか、かいもく見当がつきません。どうぞよろしくお願いします。

    • ベストアンサー
    • Mac
  • 全角のファイル名,フォルダ名

    企業のHPを分担で作っていますが、ある者の作成した部分に多数の全角ファイル名,全角フォルダ名が使われています。また、半角名のものも途中にスペース(半角)の含まれているものがあります。(彼はIBM/HPBを使っています) 一応、手元のブラウザ(IE5.5,Netscape7.0)では正常に見られるのですが、このままアップロードしてよろしいでしょうか?

  • 同一フォルダ内に一見同じファイル名のファイルができてしまいます

    同一フォルダ内に、一見同じファイル名に見えるファイルができてしまい困っています。 文字列を拾いたいファイルをテキストエディタから開き、半角数字の文字列をコピペし、そのコピーした文字列(半角数字)でフォルダ名を作成しているとたまに半角スペースのようなもの()←カッコ内の文字です。が文字列内に混じってしまいます。 その作成されたフォルダ名は見た目上は()は入っていないのですが、「ファイル名を変更」からコピーし、テキストエディタなどに貼り付けると()が混じっています。 この現象はいつ起こるかはわからなく、同じテキストからコピーしたものでも()が混じるとき、混じらないときがあります。 この謎の文字、()は何なのでしょうか?そしてそれが混じってしまう原因について、何かお知恵をお貸しください。 使用しているOSはWindowsXP Home Edition2002 SP2、使用しているテキストエディタはMKeditorです。 よろしくお願いします。

  • フォルダ内にあるファイル名からスペースを消したい

    いつも大変参考にさせていただいています。 フォルダ内にあるファイル名から 半角スペースを一括で削除する方法を知りたいのですが、わかる方 ご教授願えますでしょうか。 フォルダ内にはファイルのみしかありません。拡張子はすべて.jpg バッチファイルを作成することでできそうだったのですが、時間切れでした。 よろしくお願いいたします。