找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29515|回复: 6

[日期时间] 批处理特殊情况下如何获得正确的日期格式?

[复制链接]
发表于 2021-4-30 11:06:26 | 显示全部楼层 |阅读模式
请问坛子里的各位高手:
正常情况下,我们用date命令可以得到如下的日期格式:
当前日期: 2021-04-30 星期五

然后我用下面这条命令可以得到210430这样的日期格式。
set newdate=%date:~2,2%%date:~5,2%%date:~8,2%

但是我的批处理里面偶尔会运行老的DOS程序(见附件),之后再运行date就变成了这样了:
The current date is: ??? 2021-04-30

这时候再用我的语法就得不到正确的日期格式了。
请问有什么方法可以保证在这两种情况下都能得到正确的日期格式?
(抱歉我无法上传附件和图片)

我自己的想法是查找“202”字符出现的位置,然后以202开始截取10个字符,然后再用“%date:~2,2%%date:~5,2%%date:~8,2%“处理。但是一直没有找到解决办法
发表于 2021-4-30 16:15:21 | 显示全部楼层
回复 1# pjzhong


这样可以吗:
http://bbs.bathome.net/thread-3328-1-1.html
发表于 2021-4-30 16:48:55 | 显示全部楼层
date变量和date命令是不同的!
  1. ::变量
  2. echo %date%

  3. ::命令
  4. date /t
复制代码
之前看到过的一个方法
  1. @echo off
  2. set "idate=The current date is: ??? 2021-04-30"

  3. for /f "delims=0123456789-/" %%s in ("%idate%")do set "#s=%%s"
  4. echo 多余字符串:[%#s%]

  5. call set fdate=%%idate:%#s%=%%
  6. echo 日期:[%fdate%]

  7. pause
  8. goto :eof
复制代码
发表于 2021-5-3 11:33:48 | 显示全部楼层
回复 3# cutebe


    这个方法不好的地方在于,它无法确保年、月、日出现的顺序。
 楼主| 发表于 2021-5-8 11:33:57 | 显示全部楼层
回复 3# cutebe


    这个方法在当前使用环境下有效,谢谢!
 楼主| 发表于 2021-5-8 11:34:55 | 显示全部楼层
回复 2# Batcher


    这个总结太全面了,给了我很多启发,太感谢了!
 楼主| 发表于 2021-5-8 11:38:31 | 显示全部楼层
其实后来我发现导致日期乱码的原因是老的DOS命令把活动代码页变成了英文字符,也就是chcp显示为437。
后来我再原批处理里加入了一条:
CHCP 936   (把活动代码页更改为简体中文)
就又可以使用以前的代码了。

再次感谢大家的解答。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 17:24 , Processed in 0.031920 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表