• ベストアンサー

DOSコマンドでドットを2個含む拡張子を変更したい

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

  • morse
  • お礼率75% (6/8)

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

  • ベストアンサー
  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.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

morse
質問者

お礼

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

その他の回答 (3)

  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.3

No.2の補足です。 scriptは一例と考えて自分で適当に編集してください。 その程度は自分で行なってください。

  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.2

下記の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終了

morse
質問者

お礼

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

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.1

コマンドプロンプトで、 cmd /v:on とし、遅延環境変数を有効にした上で for /F "tokens=1" %F in ('dir /B') do @set test=%F & ren %F !test:.c.j=.java! とすると、.c.jを.javaに変更できると思います。

morse
質問者

お礼

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

関連するQ&A

  • DOSコマンドを使用せずに、ファイル名を変換したいのです。

    DOSコマンドを使用せずに、ファイル名を変換したいのです。 ファイル名を変換したいのです。 フォルダ内に、ファイル A、B、C、・・・があります これをEXCEL内にある変換表 旧ファイル名 新ファイル名   A     P   B     Q   C     R   ・     ・   ・     ・ を用いて、ファイル名を P、Q、R、・・・ に変換する方法はないでしょうか? DOSコマンドは暗号化の関係で うまく動作しません。DOSコマンドでない方法をお願いします。

  • ディレクトリ削除 Dosコマンド

    DOS画面から、ディレクトリを消すとき、普通はRD コマンドとかを使うと思うんですが、それだと、サブディレクトリがあると消せませんよね? サブディレクトリがいくつもある場合、そのルートごと削除するDOSコマンドはないでしょうか。 また、ファイルがあっても大丈夫でしょうか。

  • DOSプロンプトのコマンドが動作しません。教えてください。

    DOSプロンプトのコマンドが動作しません。教えてください。 o.5975247の続きの者ですが、DOSプロンプトからあらゆる種類のコマンドが使えない状態になっています(自分自身で知っている限りのDOSコマンドを打ちこんでみた)。 DOSコマンドを入力した結果は、以下のような表示が出ます。 `コマンド名`は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。 何とか対応の仕方をアドバイス願います。

  • DOSコマンドとか。。。

    コンパイルログが表示されている Dos画面のログをテキスト出力する方法は どうすればよいでしょうか。 コンパイルコマンド + > ファイル名 以外の方法でよろしくお願いします。 Windows2000を使用しています。 共有コンピュータの共有フォルダにアクセスする バッチファイルを作成しようと考えています。 共有フォルダにはユーザー名とパスワードを入力する 必要があり、毎回入力するのがめんどくさいからです。 どのように記述すればよいでしょうか? 以上 よろしくお願いします。

  • ファイルを作成するDOSコマンドって?

    DOSでテキストファイルを作成するコマンドは存在するのでしょうか? (UNIX環境でいうと、touchみたいなものです) ディレクトリを作成するコマンドはmkdirなんですが、ファイルを作成する コマンドって載ってないんですよ。。 DOSプロンプトから、helpで確認したんですが載ってなかったです。 helpに載ってないということは使用できない(存在しない) ということなのでしょうか? ■環境 Windows2000 Professional 回答宜しくお願いします。

  • DOSコマンド フォルダ内のファイル名

    指定したフォルダの中にある、ファイル名をフルパスでtxtファイルで出力できるDOSコマンドは何でしょうか。かなり前に使用したのですが、忘れてしまいました。宜しくお願い致します。

  • XPで 動作する DOSコマンド モードの件ですが

    XPで 動作する DOSコマンド モードの件ですが 以下の 2種類があります 1 「スタート] - [プログラム] - [アクセサリ] - [コマンドプロンプト]    2 セーフモードで 起動した コマンドモード 昔の DOS アプリが 1では うまく動作しませんが 2では動作します コマンド モードに 違いがあるのでしょうか? できれば XPマシンで 昔の DOSの AUTOEXCEC.batのように 自動で DOS アプリを起動したいのですが なにか ヒントがあれば 教えてください     

  • DOSコマンドについて

    教えてください。 DOSコマンドでコピーするバッチファイルを作っています。 主な目的はモバイルと自宅PCとのファイルのやりとりです。 copy C:\"Documents and Settings\(略)\*.*" d:\bp\mail みたいな感じでコピーしています。 フォルダ内にファイルがたくさんあると、時間が掛かってしまいます。更新されているものだけを上書きするようにはできないものでしょうか。

  • DOSコマンドを教えてください

    DOS(batファイル)で、コンピュータ名とIPアドレスを取得して、csvに吐き出したいのですが、 IPアドレスの取得ってどうすれば良いのでしょうか? ipconfigを使うとIP_Addressの次のsubnet_maskを取得しているように思えます。 今、私が作ってみたのは以下のコマンドです。 rem コンピュータ名取得 set my_computername=%computername% rem IPアドレス取得 for /f "skip=7 tokens=15" %a in ('ipconfig') do set my_ipaddress="%a" rem CSVファイル出力 echo %my_computername% , %my_ipaddress% >> sample_out.csv また、そのアドレスにもダブルコーテーションが付加されています。取ることはできますか? DOSコマンド自体、あまり知識がなく困っています。 方法がありましたら教えていただけませんか?

  • DOSのfor文に関して

    コマンドプロンプトからDOSのバッチを動かしています。 for文を使って、あるフォルダ内の、複数のExcelファイルのファイル名の後ろに、日付を付加しようとしています。 ファイル名の先頭には日付を付ける事は簡単に出来たのですが、ファイル名の後ろに付けるとなると拡張子(xls)が邪魔になってしまいます。 何か良い方法があったら教えてください。 set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% cd パス指定 for %%i in (*.xls) do rename %%i "%yy%%mm%%dd%_%%i" 「"%yy%%mm%%dd%_%%i"」で拡張子(xls)が邪魔になる為、現在はファイル名の前に日付を付けています。