batch file – 将date时间格式从YYYY / MM / DD转换为YYYY-MM-DD

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

例:

logfile.txt有时间戳:

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

里面有以下条目

 2013/07/31 03:15 DATABASE SUCCESSFULLY COMPLETED 

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

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

这真的是一个很好的,简单的语法。 如果你有一个变量的行,它不需要是一个复杂的解决方案:

 set theline=%theline:/=-% 

这当然是如上所述,如果你已经把有问题的线路变成一个变量。 如果这不仅是一次性使用,而且需要被写回到原始文件中,那么当然需要更多的代码。

使用称为REPL.BAT的混合JScript /批处理实用程序很容易完成,该实用程序执行正则表达式搜索并在stdin上进行替换,并将结果写入标准输出。 该实用程序是从XP以后的任何Windows版本上运行的纯脚本; 没有exe的下载需要。 REPL.BAT在这里可用。 完整的文档嵌入在脚本中。

假设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 

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