我有一个包含以下内容的文本文件许多日期条目格式如下:
YYYY/MM/DD
如何将其转换为以下格式?
YYYY-MM-DD
该文件包含许多日期条目,因此它应该改变所有条目的日期格式......
谢谢
答案1
使用名为 REPL.BAT 的混合 JScript/批处理实用程序可轻松完成此操作,该实用程序在 stdin 上执行正则表达式搜索和替换并将结果写入 stdout。该实用程序是纯脚本,可在 XP 及以上版本的任何 Windows 上运行;无需下载 exe。REPL.BAT 可在此处获得。完整文档嵌入在脚本中。
假设 REPL.BAT 位于您当前的目录中,或者更好的是,位于您的 PATH 中的某个位置:
@echo off
set "file=yourFile.txt"
type "%file%" | repl "(\d{4})/(\d\d)/(\d\d)" "$1-$2-$3" >"%file%.new"
move /y "%file%.new" "%file%" >nul
可以根据需要调整正则表达式,以使搜索和替换尽可能具体。
答案2
使用此代码。它将逐行遍历每一行input.txt
并将更新的行输出到output.txt
。它将查找具有当前年份和月份的行(月份的第一天,如果您解析昨晚的文件,可能会出现问题)。只有匹配的行才会被更改,因此每个 / 都会变成 -
@echo off
setlocal enabledelayedexpansion
REM Works on any NT/2k machine independent of regional date settings
REM courtesy of http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us
SETLOCAL ENABLEEXTENSIONS
if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
set '%%a'=%%i
set '%%b'=%%j
set '%%c'=%%k))
if %'yy'% LSS 100 set 'yy'=20%'yy'%
set Today=%'yy'%-%'mm'%-%'dd'%
ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%
REM above stuff near beginning of code
REM Performs substitution only for strings that include this year and month.
for /f "tokens=*" %%a in (input.txt) do (
for /f "tokens=1" %%f in ('echo %%a ^| findstr %v_year% ^| find "%v_month%" /c') do set count=%%f
if [!count!]==[1] (
set outputline=%%a%
set outputline=!outputline:/=-!
echo.!outputline! >> output.txt
REM output changed line
) else (
echo.%%a >> output.txt
REM output unchanged line
)
)