• 締切済み

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

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

みんなの回答

  • luka3
  • ベストアンサー率74% (297/399)
回答No.7

すでに解決済のようですが、原因はリネーム後のファイルが再度FORに引っかかったということではないでしょうか。 リネームあるあるです。 1234ABCDE.JPG ⇒ ABCDE.JPG ⇒ E.JPG 自分なら別のフォルダに移動させて回避、とかでしょうか。 MOVE "%FN%" "NEWFOLDER\%NEW%"

回答No.6

Batファイルならluka3さんの回答のコーディングで多分タイプ漏れで気が付かれたかもしれませんが最後にサブルーチンからメインに戻る goto :EOF を付加しても同じように最初のファイルが二回4文字、計8文字削られます。 forの(*.jpg) 等で名前を変更すると変更後もjpgなので(*.jpg)の対象と言えば対象ファイルです。なぜ、最初のファイルだけかは作った人に聞かないとわかりません。 避けるたまには「拡張子を一時的に対象外にする」または「リネイム後に隠し属性を付加して二度目の処理を避ける」しかないと思います。 ファイル名拡張子を一旦、.jpgなどを.xxjとかにリネイムし明らかに対象から外し最後に「ren "*.xxj" "*.jpg"」で本来の拡張子に戻すかあるいは、隠し属性を補足欄の「 ren "%%F" "!tempname!"」のあとに「 attrib +h !tempname!」の一行を入れforの終わった後に「attrib -h *.*」或いは「attrib -h *.jpg」「attrib -h *.png」…で元に戻すかでしょうか?

  • luka3
  • ベストアンサー率74% (297/399)
回答No.5

すでにいくつか出ていますが、バッチファイルでも出来るという例です。 拡張子 .bat でリネームしたいフォルダに保存・実行してください。 FOR %%F IN (*.JPG) DO CALL :REN4 "%%~F" PAUSE EXIT /B :REN4 SET "FN=%~1" SET "NEW=%FN:~4%" REN "%FN%" "%NEW%"

s52i4z9
質問者

補足

画像ファイルで、先頭4文字のファイル名を削除するバッチで作成しています。 ほぼ、うまく動いているのですが、 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

  • UY-Scuti
  • ベストアンサー率82% (14/17)
回答No.4

powershell -c "ls *.jpg | ren -new {$_.Name -replace '^.{4}'}"

回答No.3

コマンドプロンプトではなく、画面左下の虫眼鏡アイコンで「PowerShell」を検索して、開いたウィンドウで実行してください。

回答No.2

for %F in (*) do ren "%F" "%~nF" これは拡張子を削除しています。 for %F in (*) do ren "%F" "%F" これは同じ名前に rename なので意味がないですね。 なお、コマンドプロンプトで部分文字列を取得することはできるようです。 https://qiita.com/omaenimutyuu/items/934b2d57e6c93bb93450 ただし、for で回そうとするとうまくいかないようです。 PowerShell なら、対象のファイル名の拡張子が JPG だとして Get-ChildItem | Where-Object {$_.Extension -eq '.JPG'} | Rename-Item -NewName {$_.Name.Substring(4)} とすれば先頭4文字を削除することができます。

s52i4z9
質問者

補足

回答有難うございます。 試したのですが、下記のエラーメッセージが返ってきます 。初心者で、意味が分からないので、お教えいただけますでしょうか。よろしくお願いいたします。 'Get-ChildItem' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

  • asciiz
  • ベストアンサー率70% (6636/9403)
回答No.1

コマンドプロンプトにファイル名何文字目みたいな書式設定はないので、バッチファイルでやるのは無理があると思います。 Windowsに最初から入ってる PowerShell ならインストールの必要もなく実行できると思うんですが、PowerShell書き慣れてなくて私が書くとえらく非効率になってしまいそうで…。 一回だけ実行するのであれば、 dir /b *.jpg >jpeglist.txt として取得したファイルリストをExcelに読み込んで、リネームコマンドに変換したやつを保存して、実行するとか。 Perlなら以下のようにできました。 ----rename.pl---- my @file = glob "*.jpg"; while ($file[0] ne "") { my $newname = $file[0]; $newname =~ s/....(.*\.jpg)$/$1/i; rename $file[0], $newname; shift @file; } ----ここまで---- これをコマンドラインから perl rename.pl として実行します。 まあその前にperlインストールしないといけませんが。

関連するQ&A

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

    一括で、画像のファイル名の頭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

  • 画像のファイル名の末尾の文字4文字を削除したい

    一括で、画像のファイル名の末尾の文字を削除したいと思っています。 バッチで先頭の文字4文字を削除できたのですが、 末尾の文字4文字を削除にしたいのですが、 どうすれば良いのかを教えていただけませんか。 ご教授いただけますでしょうか。 @echo off setlocal enabledelayedexpansion for /f "delims=" %%F in ('dir /b /a-d *.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 exist "!tempname!" ( ren "%%F" "!tempname!" ) ) else ( echo ファイル名が短すぎて変更できません: "%%F" ) )

  • コマンドプロンプトでファイル名一括変更

    コマンドプロンプトのrenコマンドでフォルダ内の同一拡張子のファイル名の拡張子を一括変更することはできますが、 (例 ren *.txt *.htm ) 拡張子以外の共通部分を拡張子を含む形で一括変更することはできませんか? たとえば拡張子のないd01という文字列で終わるファイル名を一括してd01の部分を消して拡張子を.jpgにしたいのです。

  • コマンドプロンプトによるファイル名一括変換

    コマンドプロンプトで、サブディレクトリを含めたファイル名の一括変換 をしたいのですが、次のコマンドを叩いたら、「コマンドの構文が間違っています」と出てしまいました。どこがおかしいのでしょうか? カレントディレクトリの中の「*.txt」ファイルをすべて「*.doc」にしたい場合↓ for /r /d %i in (*) do ren %i\*.txt *.doc よろしくお願いします。

  • バッチを使って画像名『+』『.』『_』を削除したい

    バッチを使って、画像名の『+』、『.』、『_』を削除するというバッチを作りたいです。 実行はできたのですが、JPGの画像が、見れなくなってしまいました。 多分、画像の拡張子が潰れてしまったのだと思います。 下4桁『.jpg』を保持したまま、作りたいです。 どこが悪いのか、教えていただけますでしょうか。 @echo off setlocal enabledelayedexpansion set "source_folder=C:\path\to\your\images" for %%f in (%source_folder%\*) do ( set "filename=%%~nxf" set "filename=!filename:+=!" set "filename=!filename:.=!" set "filename=!filename:_=!" ren "%%f" "!filename!" ) echo Done! pause

  • ファイル名の一部を一括変更 コマンドプロンプト

    先ほど 【拡張子のみ一括変更したい コマンドプロンプト】 http://okwave.jp/qa/q8862743.html で質問させていただき無事解決いたしました! どうもどうもありがとうございました! 更に同じような内容になるのかとは思いますが、 どうぞこの素人にご指導くださいます様お願いします。 あるフォルダに入っている下記のようなjpg画像があります。 コマンドプロンプトを使用して『photo』部分のみを削除したいのですが、 可能でしょうか?    ・    ・    ・ 『2014_1215photo.jpg』→『2014_1215.jpg』 『2014_1216photo.jpg』→『2014_1216.jpg』 『2014_1217photo.jpg』→『2014_1217.jpg』 『2014_1218photo.jpg』→『2014_1218.jpg』    ・    ・    ・ *フォルダ内のファイルはすべてjpg *すべて上記の規則にのったファイル名 *windoews8 どうぞよろしくお願いいたします。

  • 【コマンドプロンプト】複数フォルダのファイル名一括置換の方法について

    【コマンドプロンプト】複数フォルダのファイル名一括置換の方法について お世話になっております。 コマンドプロンプトを使用して、カレントフォルダ配下のすべてのフォルダに格納されているEXCELファイルの名称の最初に[LOCAL]という文字を加えたいと考えています。 ファイル一括置換を行うフリーソフト(ファイル名変換君など)では、可能なのですが、 対象のファイルは、バッチファイルで他のフォルダからファイルをコピーをしてきているため、ファイル名変更もコピーの際に一括でできないかと思い質問をさせていただきました。 現在、同じフォルダに格納されているファイルに対しては、下記にて実行はできています。 for %i in (*.xls) do ren %i [LOCAL]%i しかし、カレントフォルダの配下すべてのフォルダを対象にしたいため、下記のように変更すると、エラーとなってしまいます。 for /r %i in (*.xls) do ren %i [LOCAL]%i おそらく・・・変数%iに、ファイルのフルパスが格納されてしまい、思い通りの動作になっていないと推測しています。 どのように作成すればよいか教えていただけませんでしょうか。 よろしくお願いいたします。

  • 数千件のファイル名を文字を小文字化して文字を追加

    どなたか、助けてください。 OSは、ウインドウズ7です。 特定のフォルダに入っている 数千件の ファイル名を (1) 小文字かして (2) 文字を追加したいのです。 いろいろ、調べたんですが、コマンドというものを使って 名前を変えるという下記のものは見つけたのですが >あるフォルダ内の.jpgファイルのファイル名の先頭に「2007_09_」という文字列を付加する例 >ファイル名を変更したいフォルダで、 >「for %i in (*.jpg) do ren %i 2007_09_%i というの応用して、 そのなかのファイル名を大文字半角から小文字半角に変えて さらに文字列を追加したいのです。 (3) また、そのファイル名のリストを作りたい のですが、未熟な私には、上手く 出来ず、困っています。 どなたか、詳しいお詳しい方、 (1) (2) (3) のコマンドの書き方をお教え助けてください。 お願いします。

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

    コマンドプロンプト初心者です。 仕事でファイルの名前を一括変換する為にバッチを作成したいのですが、 コマンドプロンプトでは動作するのに、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形式で保存をして実行をすると、冒頭で書いたように実行されません。 書き方など、自分なりに調べて試してみたのですが、やはり変換されません。 コマンドプロンプトで実行する時と、バッチで実行する時では書き方が違うのでしょうか? よろしければ知恵を貸していただきたく思います。

  • ファイル名の末尾に一括で文字を追加したい

    コマンドプロンプトで ファイル名がバラバラであるファイルの末尾に一括で同じ文字「未編集」を付けたしたいのですが ネットで調べたところ、ren *.* ????????????????????????????????bbb.*というのを見つけたのですが ファイル名の文字数だけ「?」が必要なんでしょうか? 1文字にまとめることは出来ないでしょうか? OSはWin 8です。