批处理文件 - 将日期时间格式从YYYY / MM / DD转换为YYYY-MM-DD

时间:2013-07-31 18:26:14

标签: windows batch-file

如何将日志文件中条目的日期时间格式转换为与文件本身的日期时间格式相同?

示例:

logfile.txt 有时间戳:

'date modified' 2013-07-31 03:15

在其中包含以下条目

2013/07/31 03:15 DATABASE SUCCESSFULLY COMPLETED

使用批处理脚本,如何在日志文件中将2013/07/31转换为2013-07-31?

出于好奇,是否可以更改Windows操作系统日期时间的格式?例如。您在文件和文件夹上看到的时间戳是YYYY / MM-DD还是YYYY-MM-DD?

3 个答案:

答案 0 :(得分:2)

这是一个非常好的,简单的语法。如果你在变量中得到了这一行,那么它不一定是一个复杂的解决方案:

set theline=%theline:/=-%

这当然如上所述,如果你已经将有问题的行放入变量中。如果这不只是一次性使用而需要写回原始文件,当然需要更多代码。

答案 1 :(得分:1)

使用名为REPL.BAT的混合JScript /批处理实用程序很容易完成,该实用程序执行正则表达式搜索并替换stdin并将结果写入stdout。该实用程序是纯脚本,可​​在XP之前的任何Windows版本上运行;无需下载exe文件。 REPL.BAT is available here.脚本中嵌入了完整的文档。

假设REPL.BAT位于当前目录中,或者更好,位于PATH中的某个位置:

@echo off
set "file=yourFile.txt"
type "%file%" | repl "^(\d{4})/(\d\d)/(\d\d .*DATABASE SUCCESSFULLY COMPLETED)" "$1-$2-$3" >"%file%.new"
move /y "%file%.new" "%file%" >nul

答案 2 :(得分:0)

date命令以及%DATE%%TIME%变量使用的格式由系统的区域设置决定。

您可以将日期YYYY/MM/DD转换为YYYY-MM-DD,如下所示:

@echo off

setlocal EnableDelayedExpansion

set "logfile=C:\path\to\logfile.txt"

(for /f "tokens=1*" %%l in (%logfile%) do (
  set d=%%l
  echo.!d!|findstr /r "^[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]$" >nul && set d=!d:/=-!
  echo.!d! %%m
)) >"%logfile%.new"

del "%logfile%"
move "%logfile%.new" "%logfile%"