ファイル名を特定の文字までを削除したい(ファイル名の先頭から最初に見つかった特定の文字までを削除する)
OKWave から。ファイル名の先頭から特定の文字までを削除したい、フリーソフトを探していますという相談。フリーソフトではなくバッチで考えてみました。
質問者:xykatakaak ファイル名を特定の文字までを削除したい
「23564_abcdef_1a2b3c」というような「_」で繋いだ文字列のファイル名を、最初の「_」までを、その「_」自身も含めて削除したいのです。
最初の「_」までの文字の数はまちまちで、かなりの数のファイルを処理したいのです。このようなリネームが出来るフリーソフトはあるでしょうか?(シェアウェアでもかまわないのですが)
http://okwave.jp/qa4763716.html
シェアウェアどころかバッチでできちゃいます。シェアウェアに払ったつもりでかわりにおごってください ;-P
以下が先頭から"_"までを取り除くバッチです。
"_"が入っていないファイル名、"_"が最後にあるファイル名は無視します(何もしない)。
"_"が連続する場合やフィアル名の途中に"."が複数ある様な特殊な場合は考慮していません(ややこしいので)。
このバッチを処理したいファイルのあるフォルダに置いて実行します。
ここでは対象はフォルダ内の全ファイルですが、例えばテキストファイルだけにしたければ2行目の
for /F "delims=" %%f in ('dir /b') do call :sub "%%f"
を
for /F "delims=" %%f in ('dir /b *.txt') do call :sub "%%f"
という風に変えればOKです。
:--------------------------------------------------- loop.bat echo off for /F "delims=" %%f in ('dir /b') do call :sub "%%f" exit /b :sub set fname=%~1 set n=0 :loop call set c=%%fname:~%n%,1%% set /a n=n+1 if "%c%"=="" goto :EOF if "%c%"=="_" goto break goto loop :break call set newname=%%fname:~%n%%% if "%newname%"=="" goto :EOF if "%newname:~0,1%"=="." goto :EOF ren "%fname%" "%newname%" goto :EOF
一文字ずつ順番に比較する地道なバッチです。
call set c=%%fname:~%n%,1%%
のところで、部分文字列の指定に変数を使うための小細工をしています。
昔だったら一時ファイルを作っていただろうなぁ。