Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 按日期重命名文件-批处理_Date_Batch File_Rename - Fatal编程技术网

Date 按日期重命名文件-批处理

Date 按日期重命名文件-批处理,date,batch-file,rename,Date,Batch File,Rename,我有一个文件名为:xxx_bla_1 我所需要的只是通过一个批处理命令将它变成xxx_date_1,但它必须是一些不寻常的日期格式:Jan0113,其中Jan是月,01是天,13是年。 月份总是前三个字母 所以最终结果应该是:xxx_Janu 0113_1我不知道如何重命名,但下面是获得日期的方法: %date:~3,2% + %date:~0,2% + %date:~8,2% 这将返回:010113尝试以下操作: @echo off setlocal set filename=xx

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


所以最终结果应该是:xxx_Janu 0113_1

我不知道如何重命名,但下面是获得日期的方法:

  %date:~3,2% + %date:~0,2% + %date:~8,2%
这将返回:010113

尝试以下操作:

 @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 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%
这假设“blabla”在一个名称中只出现一次

现在,如果您正在寻找更通用的案例解决方案,其中
\uu
用作分隔符:

@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
其中,
用于/f…%%m、 ..
正在模拟a
目录/b..
列表。

谢谢大家

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

日期是从哪里来的?当你键入
echo%date%
时,你会得到什么?npocmaka,它是今天的日期。有了这个脚本,你可以得到今天的日期部分,并将它们与
ren
命令一起使用-
@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