• ベストアンサー

バッチファイルで全てのファイル名を変更したい

文字数の決まっていないbmpファイル全ての頭にP_をつける バッチファイルを作成しました。 ↓ FOR %I IN (*.bmp) DO REN %I P_%I ですが、P_が1つだけでなく何個もついてしまいます。 どなたかご教授ください。 よろしくお願いします。

  • t_n_t
  • お礼率80% (34/42)

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

  • ベストアンサー
  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.2

ちょっとした記憶違いでした。 という事でWin98で作ったのでWin2K等で使えない可能性までは考慮していませんのであしからず。 ------a.bat------ @echo off IF EXIST b.bat del b.bat for %%I in (*.bmp) do echo ren %%I P_%%I>>b.bat call b.bat --------------- と訂正させてね。 #前回の回答は検証し忘れていました。

その他の回答 (1)

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.1

ren *.bmp P_*.bmp で十分だと思いますが如何ですか?

t_n_t
質問者

補足

ren *.bmp P_*.bmp はやってみたのですが、 P_がつく分、最初のファイル名の2文字が消えてしまいました。 よろしくお願いします。

関連するQ&A

  • リネームの為のbatファイル作成

    Bmpファイル名の頭に全てP_がついています。 それを削除するbatファイルを作成しています。 P_****.bmp→****.bmp 下記を作成しましたが、★の部分で詰まっています。 ------- @echo off IF EXIST b.bat del b.bat for %%I in (J_*.bmp) do echo ren %%I ★%%I>>b.bat call b.bat ------- どなたかご教授ください。 よろしくお願いします。

  • バッチファイルで画像ファイル名の頭文字を削除したい

    一括で、画像のファイル名の頭4文字を削除したいと思っています。 拡張子はJPGで、バッチで作成しています。 ほぼ、うまく動いているのですが、 1つ目の画像ファイルだけが、8文字削除されてしまいます。 どこが間違えているのかが分からなくて、 ご教授いただけますでしょうか。 よろしくお願いいたします。 @echo off setlocal enabledelayedexpansion for %%F in (*.jpg *.png *.gif *.bmp) do ( set "filename=%%~nF" set "extension=%%~xF" rem ファイル名が4文字以上の場合にのみ先頭4文字を削除 if "!filename:~4!" neq "" ( set "tempname=!filename:~4!!extension!" rem ファイル名が元の名前と異なる場合のみリネーム if not "!tempname!"=="%%F" ( ren "%%F" "!tempname!" ) ) else ( echo ファイル名が短すぎて変更できません: "%%F" ) ) endlocal

  • バッチファイルでファイル名に文字列を挿入したい。

    フォルダにあるファイル全てに対して、ファイル名の先頭に文字列を挿入するバッチファイルを作っています。 対象のファイルは、主にエクセル、ワード、パワーポイント、PDFですが、ファイルの種類に関係なく、全てのファイルに対して、ファイル名の先頭に文字列を挿入したいです。 @echo off for %%i in (*) do ren "%%i" "【文字列】%%i" pause として文字列の挿入自体はできました。 しかし、このファイルを2回実行すると、ファイル名の先頭に【文字列】【文字列】と重複して挿入されてしまうので、すでに挿入済みのファイルに対しては実行しないようにしたいのですが、うまくいきません。 また、サブフォルダ内にあるファイルに対しても同様の処理を適用したいです。 どのように記述すればよいでしょうか。 リネームソフトを使えればよいのですが、フリーソフト等はインストールできない環境ですので、できればバッチファイルを記述して対応したいのです。 OSはウインドウズ7です。

  • DOSのバッチファイルについての質問です。

    DOSのバッチファイルについての質問です。 フォルダ内のファイルネームを一括変更したいと考えています。 変更したい文字がたくさんあり、その都度インプットして処理したいと思い 下記のようなバッチを組んだのですが上手く動きません。 何かいい方法があればご教授下さい。よろしくお願いします。 echo off SET /P word= for %%a in (*%word%*) do call :sub "%%a" exit /b :sub set fname=%~1 set fname=%fname:%woad%=ああ% ren %1 "%fname%" goto :EOF

  • バッチにすると動作しない

    コマンドプロンプト初心者です。 仕事でファイルの名前を一括変換する為にバッチを作成したいのですが、 コマンドプロンプトでは動作するのに、bat形式のファイルに保存して実行すると、一瞬だけ窓が開いてすぐ終了してしまいます。 変換はもちろんされておりません。 フォルダの構成は下記の通りです。 フォルダ ┣フォルダA    ┣p001-a01_01.jpg    ┣p002-b01_01.jpg    ┗p003-c01_01.jpg ┣フォルダB    ┣p001-a01_01.jpg    ┣p002-b01_01.jpg    ┗p003-c01_01.jpg ┗フォルダC フォルダ内にある001-a01_01.jpgの【_01】を消して001-a01.jpgという風にしたいのですが、 cd C:\Data for /r /d %i in (*) do ren %%i\p???-a01_01.jpg p???-a01.jpg for /r /d %i in (*) do ren %%i\p???-b01_01.jpg p???-b01.jpg for /r /d %i in (*) do ren %%i\p???-b01_01.jpg p???-c01.jpg 上記のコマンドをメモ帳に書いて、コマンドプロンプトで実行したところ、ファイル名の変換はされました。 しかし、そのメモ帳をbat形式で保存をして実行をすると、冒頭で書いたように実行されません。 書き方など、自分なりに調べて試してみたのですが、やはり変換されません。 コマンドプロンプトで実行する時と、バッチで実行する時では書き方が違うのでしょうか? よろしければ知恵を貸していただきたく思います。

  • 【バッチファイル】for繰り返しがうまくいかない

    バッチファイルの置いてあるフォルダ内(ついでにサブフォルダ内も)の 特定の拡張子(今回は.txt)ファイル全てを対象に (1)ある行ある列n文字目から2文字を読み込む×2 (2)読み込んだ文字をそのファイル名の先頭に追加 というバッチファイルを作りたいです。 具体例 テキストの中身↓ a.txt ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○xx ○○yy ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... →ファイル名を「xxyya.txt」にしたい そこで素人ながら下記のようなバッチファイルを作成してみましたが、 フォルダ内にある1つ目のファイルに対してはうまく動くのですが 2つ目以降はリネーム出来ません。 フォルダ内すべての.txtファイルに実行するための 対処法がお分かりになれば、ご教授いただけると幸いです。 「rename.bat」 cd /d %~dp0 rem .txtファイルを列挙 for /f "usebackq tokens=*" %%i in (`dir /s /b *.txt`) do ( set name=%%~xni rem 特定の行列の文字列を抜き出して変数へ格納 for /f "skip=5 tokens=2,3" %%a in (%%i) do ( set front=%%a set back=%%b rem 7行目以降は不要なのでforから離脱 goto break ) :break rem 抜き出した文字列からさらに必要な文字を抜き出して変数へ set hed="%front:~2,2%%back:~2,2%" rem 元のファイル名へ追記 ren %name% %hed%%name% )

  • 一括で、画像のファイル名の頭4文字を削除したい

    一括で、画像のファイル名の頭4文字を削除したいと思っています。 拡張子はJPGになります。 現在、コマンドプロンプトで、下記のようにコマンドを作っていますが、 プログラムが不慣れで、どこが、間違っているのかが、 ご教授いただけますでしょうか。 for %F in (*) do ren "%F" "%~nF" for %F in (*) do ren "%F" "%F"

  • 複数ファイルの一括名称変更

    ファイル名が1234_200812061.datという形式になっているファイルが大量にあります。このファイル名の先頭部分1234_を削って後半部分200812061.datだけの名称に変更したいのです。 renコマンドを使ってもうまく行かないので恐らくバッチファイルでfor文などを使って処理できると思うのですが、うまく行きません。私が作ったバッチでは for /f "skip=5" %%A in (*.dat) do ren *.dat %%~nA.dat のように処理しているのですが、うまく行かないようです。 どなたかご教授していただけますでしょうか。

  • バッチファイルのfor文の使い方がわかりません。

    バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。

  • バッチファイルでの%を含むファイル名の取得

    以下はEドライブを走査してフォルダごとのjpgやpngなどのファイルの数を全て表示するバッチ処理ですが。基本的に上手く動きますが%を含むファイル名、フォルダ名に当たると上手く動きません。どうしたらいいでしょうか?”ファイル名、フォルダ名に%を使うな”という回答以外でお願いします。 @echo off pushd E:\ for /f "delims=" %%j in ('dir /b /s /a:d') do call :sub "%%j" exit /b :sub echo /////////////////////////////////////////////////////////////////////////// for /f "delims=" %%x in ('dir /b %1 ^| find /c ".jpg"') do call :jpg %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".JPG"') do call :jpg2 %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".png"') do call :png %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".bmp"') do call :bmp %%x echo %1 echo jpg %jpg_c% echo png %png_c% echo bmp %bmp_c% echo JPG %jpg2_c% goto :EOF :jpg set jpg_c=%1 :echo %1 goto:EOF :jpg2 set jpg2_c=%1 :echo %1 goto:EOF :png set png_c=%1 :echo %1 goto:EOF :bmp set bmp_c=%1 :echo %1 goto:EOF :all set all_c=%1 :echo %1 goto:EOF