2013-04-30 147 views
1

我有一個名爲的文件:xxx_blabla_1 我需要的是通過批處理命令將其變爲xxx_date_1,但它必須採用某種不尋常的日期格式:Jan0113,其中Jan一個月,01是一天,13是一年。 幾個月總是前3個字母。按日期重命名文件 - 批號

所以,最終的結果應該是:xxx_Jan0113_1

+0

和哪裏的日期取自? – npocmaka 2013-04-30 15:23:23

+0

當你輸入'echo%date%'時,你會得到什麼? – 2013-04-30 15:28:13

+0

npocmaka,今天是日期。 – whatever61 2013-04-30 15:29:52

回答

1

我不知道如何重命名,但這裏是你會做什麼來獲得日期:

%date:~3,2% + %date:~0,2% + %date:~8,2% 

將返回:010113

0

試試這個:

@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%) 

您可以取代 '回聲30/04/13' 只有用 'echo%DATE%'。由於我的日期格式與您的日期格式不同,我必須對其進行硬編碼。如果您將所需的結果打印到屏幕上,請在ren之前刪除回顯以實際執行操作。

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% 
+0

+1非常好的代碼 – 2013-04-30 16:39:31

0
@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%" 

這是假定在一個名稱 '布拉布拉' 只發生一次。現在

,如果你正在尋找一個更一般的情況下的解決方案,其中_用作分隔符:

@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 

for/f ... %%m...是模擬說dir /b...上市。

0

謝謝大家。

我發現了一些我用它的工具,就是這樣。 忘記更新它在這篇文章:)