プロが教えるわが家の防犯対策術!

Windowsのリネームコマンドでアンダースコアを消す方法を教えてください。
test_01というファイル名からアンダースコアを削除してtest01といファイルに変更したいのです。
> rename test_01 test01
とすると、「指定されたファイルが見つかりません」と表示されます。
ワイルドカードを使って
> rename test_* test*
とすると、エラーは出ませんが、ファイル名は変わりません。
> rename test0* test0*
とすると、ファイル名がtest001になってしまいます。
test_01だけじゃなくtest_99まで変換するファイル数が多いので、
1回のコマンドでtest_01からtest_99までのファイル名を変換したいのです。

質問者からの補足コメント

  • 回答ありがとうございます。
    >「.なんたら」と付いてませんか?
    .gifって付いています。
    test_01.gif
    test_02.gif
    test_03A.gif
    test_03B.gif
    test_10.gif

    test01.gif
    test02.gif
    test03A.gif
    test03B.gif
    test10.gif
    に一括変換したく、
    >ren test_*.gif test*.gif
    とコマンドを打ったのですが、ファイル名は変わりませんでした。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/04/24 16:13

A 回答 (5件)

No3 です



失礼しました。"dir /b *.gif > list.txt" とすべきことろを、コピペしなかったので、/b のオションを失念してしまいました

変更できたようで、何よりです
    • good
    • 0

バッチファイルですと、以下の線内のような感じで出来るかと思います。



「C:\対象フォルダ」フォルダ直下にある、「*.gif」と「*.jpg」ファイルを対象とする例です。サブフォルダ配下のファイルは対象となりません。

「設定」の下の部分だけご自身の環境に合わせて書き換え、テスト用にコピーしたファイルでテストしてみてください。

又、対象ファイル名内の「 _ 」は全て無しになりますのでご留意ください。

―――――――――――――――――――――――――

@echo off

rem ■ 設定
set "対象フォルダ=C:\対象フォルダ"
set 対象ファイル= "*.gif" "*.jpg"

rem ***********************

rem ■ カレントディレクトリを対象フォルダに変更
pushd "%対象フォルダ%"

rem ■ リネームのループ処理
for /f %%a in (' dir /b /a-d %対象ファイル% ') do call :Sub "%%~a"

rem ■ 終了する
exit

rem ***********************

rem ▼ 今回の1ファイルのリネーム処理・開始 ▼
:Sub

rem ■ 変数「リネーム後ファイル名」に、今回のファイル名(第一引数)をそのまま代入する
set "リネーム後ファイル名=%~1"

rem ■ 変数「リネーム後ファイル名」内の「_」を無しに置換する
set "リネーム後ファイル名=%リネーム後ファイル名:_=%"

rem ■ 今回のファイルの名前を、変数「リネーム後ファイル名」と同じにリネームする
ren "%~1" "%リネーム後ファイル名%"

exit /b
rem ▲ 今回の1ファイルのリネーム処理・終了 ▲

―――――――――――――――――――――――――
    • good
    • 0

No2ですが、補足で



もし、同じフォルダーに、test_???.gifの他に、拡張子の異なる、同様のファイルがあれば、

dir test_*.gif > list.txt

拡張子をつけて変更してください。

追記で
誤:c:^\test>del list.txt
正:c:\test>del list.txt

です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
No2.No3へのお礼です。
3行をそのまま実行してみましたが、
2行目の実行時に、

C:\test>ren ドライブ_C testC
指定されたファイルが見つかりません。
C:\test>ren ボリューム_シリアル番号は testシリアル番号は
指定されたファイルが見つかりません。
C:\test>ren C:\test_のディレクトリ testのディレクトリ
指定されたファイルが見つかりません。
C:\test>ren 2020/06/17_10:01 test10:01
コマンドの構文が誤っています。
・・・

というエラーがでてうまくいきませんでした。
その後、list.txtから、ファイル名以外を削除したら、
変換できました。

お礼日時:2023/04/28 09:11

複雑なバッチファイルを書くのは大変だと思いますが、前処理と、後処理を加えれば、3回のコマンドで可能です



testディレクトリで、list.txtというファイルがないことを前提で、下記三つをコピペして実行してみてください。念のため、フォルダーのバックアップをお勧めしておきます

c:\test>dir test_*.* > list.txt
c:\test>for /f "tokens=1,2* delims=_ " %f in (list.txt) do ren %f_%g test%g
c:^\test>del list.txt

これでできると思います
    • good
    • 0

本当に「test_01」というファイル名ですか?


コマンドプロンプトで dir コマンドを実行したらどうなってますか?
「test_01.txt」というように後ろに 「.なんたら」と付いてませんか?
エクスプローラーで拡張子を隠すように設定されてないですか? https://www.pc-koubou.jp/magazine/36291


>rename test_01 test01
「test_01」というファイル名なら、これで問題無く変更できます。
「指定されたファイルが見つかりません」となるのは、拡張子を隠した状態での表示を本当のファイル名だと誤解しているのだと思われます。


> rename test_* test*
> rename test0* test0*

変更後のファイル名中のワイルドカードは、結構ややこしいです。(私はほとんど把握していないので、最小限しか使いません)
少なくとも、変更前の*がそのまま変更後の*の位置にくるわけではありません。



主目的が「test_01からtest_99までのファイル名を変換したい」なら、各種リネームツールがあるので、それらを使うのがいいでしょう。
例) https://dekiru.net/article/23125/
この回答への補足あり
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています