牛、豚、鶏、どれか一つ食べられなくなるとしたら?

教えていただきたいことは、ドットを2個含むファイル名の拡張子をサブフォルダ内も含めてドット1個だけの拡張子に変更するDOSコマンドのことです。
例えば、「*.c.j」のファイル名を「*.java」のように、あるフォルダ以下のファイルの拡張子をすべて変えたいのです。
FORコマンドをヘルプで調べたのですが、良く判りませんでした。
OSはXPで動作すれば十分なのですが、こんな機能のコマンドはあるのでしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

できました。
ありがとうございます。
私が判らなかったのは、リネームにこだわったのと、&で複数のコマンドを繋げるのを知らなかったためのようです。

お礼日時:2011/04/13 20:13

No.2の補足です。


scriptは一例と考えて自分で適当に編集してください。
その程度は自分で行なってください。
    • good
    • 1

下記の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終了
    • good
    • 1
この回答へのお礼

早速の回答をありがとうございます。
コピペして試してみたのですが、カレントディレクトリについては希望どおりになるのですが、サブディレクトリのファイルは変更されません。
また、拡張子は任意のものに変更できそうと思ったのですが、.c.jを.jに変更するのはOKなのですが、.cに変更しようとすると、カレントディレクトリの該当ファイルが削除されてしまいます。

お礼日時:2011/04/11 20:08

コマンドプロンプトで、



cmd /v:on
とし、遅延環境変数を有効にした上で
for /F "tokens=1" %F in ('dir /B') do @set test=%F & ren %F !test:.c.j=.java!

とすると、.c.jを.javaに変更できると思います。
    • good
    • 0
この回答へのお礼

早速の回答をありがとうございます。
試してみたのですが、カレントディレクトリについては希望どおりになるのですが、サブディレクトリは変更されません。
サブディレクトリの数が多いため、ディレクトリを移動しながらのコマンド入力はつらいものがあります。

お礼日時:2011/04/11 20:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報