ファイル名の拡張子の直前のドット以外のドットを置換するバッチファイル

以前の記事にコメントをいただいてました。

ファイル名の置換(ファイル名の一部文字を別の文字に置き換える) - バッチもん研究所 blogのコメント欄

sぱ 2017/01/18 19:13

便利に使わせていただいてます
ファイル名の拡張子の.だけ消去せずに その前の.を置換する方法はありますか?

call :sub で呼び出した先の引数は%1で呼び出せますが、ファイル名の拡張子と拡張子を除くファイル名に分けるのに
%~n1
%~x1
が使えます。
例えば sample1.1.3.txt なら
%~n1 は sample1.1.3
%~x1 は .txt
が入ります。

この %~n1 を置換の対象にすればいいでしょう。
以下はファイルの"."(ドット)を"_"(アンダーバー)に置換するサンプルです。

echo off
for /F "delims=" %%F in ('dir /b') do call :sub "%%F"
exit /b

:sub
set fname=%~n1
set fname=%fname:.=_%
ren "%~1" "%fname%%~x1"
goto :EOF