- ベストアンサー
DOSコマンドでドットを2個含む拡張子を変更したい
教えていただきたいことは、ドットを2個含むファイル名の拡張子をサブフォルダ内も含めてドット1個だけの拡張子に変更するDOSコマンドのことです。 例えば、「*.c.j」のファイル名を「*.java」のように、あるフォルダ以下のファイルの拡張子をすべて変えたいのです。 FORコマンドをヘルプで調べたのですが、良く判りませんでした。 OSはXPで動作すれば十分なのですが、こんな機能のコマンドはあるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。遅延環境変数の所までは一緒でforコマンドの部分を以下のように変えてはどうでしょう? for /F %F in ('dir /s /b *.c.j') do set test=%F & copy %F !test:.c.j=.java! & del %F
その他の回答 (3)
- 8ive22ty
- ベストアンサー率52% (770/1479)
No.2の補足です。 scriptは一例と考えて自分で適当に編集してください。 その程度は自分で行なってください。
- 8ive22ty
- ベストアンサー率52% (770/1479)
下記のscriptを.bat(または.cmd)として実行してみてください。 内容を見れば解るように、オーソドックスな方法で作成しました。 今回のケースでは 「変更前の拡張子:」という質問には c.j と入力します。( .c.j ではない) 「変更後の拡張子:」という質問には java と入力します。( .java ではない) rem-----ここからscript @echo off echo フォルダ内のファイルの拡張子の変更を行ないます echo 必要事項を入力してください echo 何も入力がない場合は終了します set /p ext1="変更前の拡張子:" if "%ext1%"=="" goto quit echo ------------------------------ dir *.%ext1% echo ------------------------------ echo 以上のファイルが該当しました echo 変更後の拡張子を入力すると、変更を行います echo 何も入力がない場合は終了します set /p ext2="変更後の拡張子:" if "%ext2%"=="" goto quit for /R %%i in ( *.c.j ) do echo %%~ni > tmp.txt for %%j in (tmp.txt) do copy *.%ext1% *.%j% ren *.c *.%ext2% echo. echo 変更完了しました。 :quit echo. echo 終了します。(Enterキーを押す) :end del tmp.txt *.%ext1% *.c set /p ext1="" set /p ext2="" rem-----script終了
お礼
早速の回答をありがとうございます。 コピペして試してみたのですが、カレントディレクトリについては希望どおりになるのですが、サブディレクトリのファイルは変更されません。 また、拡張子は任意のものに変更できそうと思ったのですが、.c.jを.jに変更するのはOKなのですが、.cに変更しようとすると、カレントディレクトリの該当ファイルが削除されてしまいます。
- axel_eye
- ベストアンサー率64% (145/226)
コマンドプロンプトで、 cmd /v:on とし、遅延環境変数を有効にした上で for /F "tokens=1" %F in ('dir /B') do @set test=%F & ren %F !test:.c.j=.java! とすると、.c.jを.javaに変更できると思います。
お礼
早速の回答をありがとうございます。 試してみたのですが、カレントディレクトリについては希望どおりになるのですが、サブディレクトリは変更されません。 サブディレクトリの数が多いため、ディレクトリを移動しながらのコマンド入力はつらいものがあります。
お礼
できました。 ありがとうございます。 私が判らなかったのは、リネームにこだわったのと、&で複数のコマンドを繋げるのを知らなかったためのようです。