- ベストアンサー
フォルダ名をファイル名の先頭に追加できるバッチ
例えばDドライブ直下にAからZまでの26個のフォルダがあり、例えばフォルダAの中に01から99までの連番で01.txt~99.txtと言うものがあったときに、バッチファイルのアイコンにフォルダAをドラッグアンドドロップするとフォルダ内のファイルがA01.txt~A99.txtと言うファイルが生成される、なお、フォルダはAからZまでまとめてバッチファイルのアイコンにドラッグアンドドロップしたらファイル名をリネームできるものを希望します、そのようなバッチはどのように作ったらよいのでしょうか。 当方の環境はwindows7 HomePremiam 64bitです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>現在バッチファイルは そんな馬鹿な。No3のやりとりはどうなったんですか? for %%A in (%*) do call :sub %%A pause goto :EOF :sub set "A=%~nx1" for %%B in (%1\*.txt) do ren "%%B" "%A%%%~nxB" goto :EOF となっているはずですが。
その他の回答 (4)
- notnot
- ベストアンサー率47% (4900/10358)
>指定されたバッチ ラベルが見つかりません - sub タイプミスですね。 コピペしてください。 後半の :sub の部分がおかしい。
お礼
回答ありがとうございます。 No1とNo2のご回答を参考に編集し、 現在バッチファイルは for %%A in (%*) do call :sub %%A goto :EOF :sub set "A=%~nx1" for %%B in (%1\*.txt) do ren "%%B" "%A%%%~nxB" goto :EOF となっております。 コピペして編集したのですが、バッチファイル中に間違いがございますでしょうか?
- notnot
- ベストアンサー率47% (4900/10358)
エラー内容を確認してください。 for %%A in (%*) do call :sub %%A pause goto :EOF とすると、実行後に、画面が止まります。
お礼
回答ありがとうございます。 下記のメッセージが出て画面が止まりました。 D:\>for %A in (D:\a) do call :sub %A D:\>call :sub D:\a 指定されたバッチ ラベルが見つかりません - sub D:\>pause 続行するには何かキーを押してください . . .
- notnot
- ベストアンサー率47% (4900/10358)
お書きの条件であれば問題ないはずです。 もしかして、フォルダ名のフルパスに空白などが含まれていたりしますか? その場合は、ren の部分を ren "%%B" "%A%%%~nxB" と引用符を付けてください。 set A=%~nx1 の部分も、 set "A=%~nx1" とした方が安全ですね。
お礼
ありがとうございます。 テストに使ったフォルダ名とファイル名は空白がありました。 ですので、No.2のご回答で教えていただいたようにバッチファイルを編集し、引用符をつけてみました。 しかし、リネームは実行されず、フォルダをDドライブ直下に移動し、フォルダ名をaとし、ファイル名を半角英数字のみにしたのですが、それでもやはりリネームは実行されませんでした。
- notnot
- ベストアンサー率47% (4900/10358)
質問を文字通り読むと、ファイルを新規生成するように読めますが、おそらくリネームしたいのですよね。 for %%A in (%*) do call :sub %%A goto :EOF :sub set A=%~nx1 for %%B in (%1\*.txt) do ren %%B %A%%%~nxB goto :EOF %* がドロップされた物一覧 %~nx1 %~nxB がパス名の最下位部分の取り出し
お礼
ありがとうございます。 ご推察のとおり、希望していることはリネームです。 しかし、やってみたのですが、できませんでした。 もしかしたら、ドラッグアンドドロップしたフォルダの中のファイルをリネームする設定ではなく、ドラッグアンドドロップしたフォルダそのものをリネームするバッチ 例として、 setlocal enabledelayedexpansion :LOOP if "%~1"=="" goto :EOF set A=%~dp1 for %%A in ("!A:~0,-1!") do ren "%~1" "%%~nxA%~nx1" shift goto LOOP というようなバッチになっていると思ったりもしたのですが、 バッチが実行されても特に処理されていないように見えます。
お礼
>そんな馬鹿な。No3のやりとりはどうなったんですか? No3のやりとりというのは、No.1とNo.2とは別にテストのためにバッチファイルを作って試して見たものだと理解していたのですが、違ったのでしょうか? とりあえず、今回ご回答いただいたように編集し、実行したところ、リネームはされず、次のような画面が出て止まりました。 D:\>for %A in (D:\a) do call :sub %A D:\>call :sub D:\a D:\>set "A=a" D:\>for %B in (D:\a\*.txt) do ren "%B" "a%~nxB" D:\>goto :EOF D:\>pause 続行するには何かキーを押してください . . .
補足
失礼、うまく私の希望が伝わっておりませんでした。 私が質問として、あるフォルダに拡張子がtxtの連番のファイルがあるときのことを書きましたが、これはひとつの例であり、リネームしたいのはtxtファイルに限らなかったのです。 そこで、今回、ご回答いただいたバッチファイルの中の txt の箇所を * に編集したところ、希望していたことがうまくいきました。おかげで、手間が省けるようになり大変助かります。 丁寧に何度もやり取りをしていただき、ありがとうございました。