Windows批处理生成无空格的YYYYMMDD-hhmmss格式时间字符串
解决CMD下生成无空格"YYYYMMDD-hhmmss"格式时间字符串的问题
嗨,我看你在CMD里折腾这个时间格式字符串好久了,试了各种去空格的方法都没用,还没法用PowerShell,这就给你搞定!
首先先看你贴的代码里的明显笔误:设置Hour的时候,你写成了set Hour=00%Day%,这肯定错了,应该是set Hour=00%Hour%,这是导致Hour值不对的一个小问题,先修正这个。
不过我猜你真正的痛点是用wmic获取时间时,变量值后面带尾随空格,手动赋值只是测试对吧?那重点解决这个wmic输出的空格问题——因为wmic的list格式输出里,每个变量值后面会带一个无关的空格,直接用的话就会导致最终字符串里出现空格。
修正后的完整批处理代码(自动获取时间版)
@echo off rem 用for /f处理wmic的输出,同时去除尾随空格 for /f "tokens=2 delims==" %%x in ('wmic path win32_localtime get Year^,Month^,Day^,Hour^,Minute^,Second /format:list ^| findstr "="') do ( set "%%x=" for /f "delims=" %%y in ("%%x") do set "%%y" ) rem 补零处理,确保每个部分都是两位数字 set "Year=%Year%" set "Month=0%Month%" & set "Month=%Month:~-2%" set "Day=0%Day%" & set "Day=%Day:~-2%" set "Hour=0%Hour%" & set "Hour=%Hour:~-2%" set "Minute=0%Minute%" & set "Minute=%Minute:~-2%" set "Second=0%Second%" & set "Second=%Second:~-2%" rem 拼接成目标格式 set "yyyymmddhhmmss=%Year%%Month%%Day%-%Hour%%Minute%%Second%" echo %yyyymmddhhmmss% pause
关键要点说明
- 去除wmic输出的空格:嵌套了一层
for /f,因为for /f默认会忽略首尾空格,所以内层的for /f "delims=" %%y in ("%%x") do set "%%y"就能把变量值后面的尾随空格去掉。 - 补零逻辑:给单个数字的月份、日期等前面加个0,再取最后两位,比如
Month=7会变成07,Month=12还是12。 - 年份处理:win32_localtime返回的是四位年份(比如2024),直接用
%Year%就能得到完整四位年份,符合你示例里的格式要求。
如果你是手动赋值测试的话,修正后的代码是这样的
@echo off set Year=2020 echo %Year% set Month=7 set Month=0%Month% && set Month=%Month:~-2% && echo %Month% set Day=16 set Day=0%Day% && set Day=%Day:~-2% && echo %Day% set Hour=10 set Hour=0%Hour% && set Hour=%Hour:~-2% && echo %Hour% set Minute=2 set Minute=0%Minute% && set Minute=%Minute:~-2% && echo %Minute% set Second=5 set Second=0%Second% && set Second=%Second:~-2% && echo %Second% set yyyymmddhhmmss=%Year%%Month%%Day%-%Hour%%Minute%%Second% echo %yyyymmddhhmmss% pause
这里主要就是把Hour那行的%Day%改成了%Hour%,补零的写法也简化了一点,不用加两个0,加一个就够,取最后两位效果一样。
这样运行之后,就能得到你想要的20200716-100205这种没有空格的格式啦!
内容的提问来源于stack exchange,提问作者YorSubs
相关产品推荐
相关产品推荐

