xxx_blabla_1 という名前のファイルがあります。必要なのは、バッチ コマンドを使用して xxx_date_1 にすることだけですが、Jan0113 という珍しい日付形式にする必要があります。Jan は月、01 は日、13 は日付です。年。月は常に最初の 3 文字です。
したがって、最終結果は次のようになります: xxx_Jan0113_1
xxx_blabla_1 という名前のファイルがあります。必要なのは、バッチ コマンドを使用して xxx_date_1 にすることだけですが、Jan0113 という珍しい日付形式にする必要があります。Jan は月、01 は日、13 は日付です。年。月は常に最初の 3 文字です。
したがって、最終結果は次のようになります: xxx_Jan0113_1
@echo off
setlocal EnableDelayedExpansion
rem Define month names array (with 2-digits subscripts)
set m=100
for %%a in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
set /A m+=1
set month[!m:~-2!]=%%a
)
rem Get today's date parts
for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
set dd=%%a
set mm=%%b
set yyyy=%%c
)
rem Do the rename
ren xxx_blabla_1 xxx_!month[%mm%]!%dd%%yyyy:~-2%
名前を変更する方法はわかりませんが、日付を取得するには次のようにします。
%date:~3,2% + %date:~0,2% + %date:~8,2%
これは次を返します: 010113
@ECHO OFF
SETLOCAL
:: date format (given) is dd/mm/yy
SET "newbla=01Jan02Feb03Mar04Apr05May06Jun07Jul08Aug09Sep10Oct11Nov12Dec"
CALL SET newbla=%%newbla:*%date:~3,2%=%%
SET oldname=xxx_blabla_1.whatever
CALL SET newbla=%%oldname:blabla=%newbla:~0,3%%date:~0,2%%date:~6,2%%%
ECHO REN "%oldname%" "%newbla%"
This assumes that 'blabla' occurs only once in a name.
Now, if you're looking for a more general-case solution, where _
is used as a delimiter:
@ECHO off
SETLOCAL
SET oldname1=xxx_blabla_1.whatever
SET oldname2=yyy_albalb_9.whatever
:: date format (given) is dd/mm/yy
SET "newbla=01Jan02Feb03Mar04Apr05May06Jun07Jul08Aug09Sep10Oct11Nov12Dec"
CALL SET newbla=%%newbla:*%date:~3,2%=%%
SET newbla=%newbla:~0,3%%date:~0,2%%date:~6,2%
FOR /f "tokens=1*delims==" %%m IN ('set oldname') DO (
FOR /f "tokens=1,2*delims=_" %%a IN ("%%n") DO (
SET oldname=%%a_%%b_%%c
CALL SET newname=%%oldname:%%b=%newbla%%%
SETLOCAL enabledelayedexpansion
ECHO REN "!oldname!" "!newname!"
endlocal
)
)
GOTO :eof
Where the for/f ... %%m...
is simulating say a dir /b...
listing.
これを試して:
@echo off
setlocal
set filename=xxx_blabla_1
for /f "tokens=1-3 delims=/" %%a in ('echo 30/04/2013') do (
set day=%%a
set year=%%c
)
for /f "tokens=1,3 delims=_" %%a in ("%filename%") do (
set first=%%a
set third=%%b
)
for /f "tokens=2 delims=/" %%i in (
'echo 30/04/2013') do set/a mnth=1%%i-100
set year=%year:~2,2%
for /f "tokens=%mnth%" %%i in (
"DEC JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV") do (
echo ren %filename% %first%_%%i%day%%year%_%third%)
「echo 30/04/13」を単に「echo %date%」に置き換えることができます。私の日付形式はあなたのものとは異なるため、ハードコーディングする必要がありました。必要な結果が画面に出力された場合は、ren の前にある echo を削除して、実際にアクションを実行します。