• ベストアンサー

bat 親フォルダの名前を子フォルダに追加

最近何度も質問させていただいて、恐縮ですがコードをお教えください。よろしくお願いいたします。 親フォルダ名「あ1」にbatファイルがあります。 親フォルダ内に子フォルダ名「か1」、「か2」・・・「××」があります。 batファイルを実行し、子フォルダ名のを変更したい。 変更内容は、親フォルダ名_子フォルダ名です。 か1⇒あ1_か1 か2⇒あ1_か2 ××⇒あ1_××

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

下記で出来ますが、in (*) のように「そこにあるすべて」じゃなくて、 in (*1) のように「名前が1で終わるフォルダーだけ」のようにすると、名前の順序によっては意図しない動作になる可能性があります。 ===================== setlocal rem あ1 に移動 pushd %~dp0 rem これで PARENT に あ1 が入るはず for /f "delims=" %%A in ("%CD%") do set "PARENT=%%~nxA" rem リネームする for /d %%A in (*) do ren "%%~A" "%PARENT%_%%~A" popd

gennya
質問者

お礼

回答ありがとうございます。 うまくいきました。 ところで、in (*1)の時、意図しない動作をするのは理由があるのでしょうか?

Powered by GRATICA

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

> ところで、in (*1)の時、意図しない動作をするのは理由があるのでしょうか? 理由というか、CMD.EXEのバグでしょうね。 あるいは、本格的なプログラミング言語ではないので、MSは「バグじゃなくて制約」と言うかもしれませんが、「FORを使って名前の辞書的な順番を入れ替えるリネームは出来ない」とかはどこにも書いてないので、言い逃れしにくいですね。 サンプル: md AFOO md BFOO md CFOO for /d %%A in (*FOO) do ren "%%~A" "ZZZ_%%~A" dir /ad *FOO (*) か (*FOO) ヵで違いが出ます。

gennya
質問者

お礼

何度もありがとうございます。 不具合を確認できました。バグではどうしようもないですね。

Powered by GRATICA

関連するQ&A