1

我有一个名为:xxx_blabla_1 的文件,我只需要通过批处理命令将其变为 xxx_date_1,但它必须采用一些不寻常的日期格式:Jan0113,其中 Jan 是月份,01 是日期,13 是年。月份总是前 3 个字母。

所以最终结果应该是:xxx_Jan0113_1

4

5 回答 5

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%
于 2013-04-30T16:32:36.550 回答
1

我不知道如何重命名,但这是您获取日期的方法:

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

这将返回:010113

于 2013-04-30T16:22:57.543 回答
0

谢谢大家。

我找到了一些我用来做它的工具,就是这样。忘记在这篇文章中更新它:)

于 2013-05-17T13:56:16.517 回答
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%"

这假设 'blabla' 在名称中仅出现一次。

现在,如果您正在寻找更通用的解决方案,可以将 where_用作分隔符:

@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...列表。

于 2013-04-30T20:30:37.137 回答
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%)

您可以将 'echo 30/04/13' 替换为 'echo %date%'。由于我的日期格式与您的不同,我不得不对其进行硬编码。如果您将所需的结果打印到屏幕上,请删除 ren 之前的回声以实际执行操作。

于 2013-04-30T16:30:18.140 回答