中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 04:06
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)CMD下如何把AM/PM的时间方式更改为24小时制并输入到系 查看 2,283 回复 7
楼 主 (已结)CMD下如何把AM/PM的时间方式更改为24小时制并输入到系 发表于 2005-11-08 22:13 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
UID 43709
性别 男
状态 离线
环境:WinXP CMD(CMD Ver 5.1.2600)

我需要向网络内一台叫A1(192.168.0.112)的计算机校对时间,然后把本地时间改成与A1的一样.

然而我用net time之后,输出的文本是如下格式的.

\\192.168.0.112 的当前时间是 2005/11/8 下午 09:47

命令成功完成。


我把09和47滤出来了,也导入到系统了.

但当前时间可是下午的9点多啊,也就是21点多.

请教高手们有没办法把09改成21.

请勿使用第三方工具.

我所写的批处理如下:

net time \\192.168.0.112>%temp%\$112$.tmp
FOR /F "tokens=5,6* delims=: " %%a in (%temp%\$112$.tmp) do (Set voltime=%%a%%b) & echo time %%a:%%b>%temp%\$Newime$.bat
Start %temp%\$Newtime$.bat
Del /Q %temp%\$Newtime$.bat


把运行$Newtime.bat$之后,系统的时间就成了9点多了.

[ Last edited by voiL on 2005-11-9 at 20:18 ]
2 发表于 2005-11-09 19:06 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re voiL:

试试下面的代码:


@echo off
for /f "tokens=4,5,6 delims=: " %%a in ('net time \\192.168.0.112') do call:settime %%a %%b %%c
goto:eof

:settime
set _hour=%2
if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1%
if "%1"=="下午" set /a _hour=%_hour%+12
set voltime=%_hour%%3>nul
time /t %_hour%:%3>nul
set _hour=


[ Last edited by willsort on 2005-11-9 at 19:07 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
3 发表于 2005-11-09 20:16 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
UID 43709
性别 男
状态 离线
多谢willsort的指点,试用过您给出的代码,确实可行.

只是修改本地时间那里不能实现,必须把"/t"去掉才行.

time /t %_hour%:%3>nul 应当改为 time %_hour%:%3>nul
4 发表于 2005-11-10 12:45 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
UID 43709
性别 男
状态 离线
测试环境:WinXP CMD(CMD VER 5.1.2600)

经过反复试验,发现willsort兄的代码还有些BUG.

如果192.168.0.112的机子时间是12:00~12:59的时候.

net time \\192.168.0.112得到的结果是:

\\192.168.0.112 的当前时间是 2005/11/10 下午 12:22

命令成功完成。


到这里,willsort兄应该能看出问题了吧??

在经过以下代码运算后,会把时间改成 24:22(一个系统不能接受的时间)

if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1%
if "%1"=="下午" set /a _hour=%_hour%+12


我把代码改成以下样式之后,就没有出现过同样的问题.

if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1%
if "%1"=="下午" if "%2"=="12" set /a _hour=%_hour%+12
5 发表于 2005-11-10 19:45 ·  中国 山西 临汾 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re voiL:

  甚为欣赏兄实际测试的行动和独立思索的意识,希望能与兄多多交流。

  time /t 的问题确实是我的疏忽,因为我在 xp_cmd 下使用 time 时习惯上使用 time /t 的格式;12点的问题我也曾有考虑,但是因为在我的印象中系统不会给出下午12点的时间,而是会给出上午0点的时间,因此最终对此未作处理。

  说到底都是测试的问题,因为我不想再测试中更改我的系统时钟,所以 time /t 一句是写作 echo time /t %_hour%:%3 的,测得显示结果没有问题后,就将代码改成上述模样直接贴出了;而12点问题,因为自己的系统不是12时制的,所以也就偷懒未作测试了。许许多多的事实一再证实,不经测试或测试不周的代码是绝对靠不住的!可惜很多得到论坛所贴代码的朋友不会理睬这些,所以这才显示出兄进行实际的和周到的测试的可贵。

  另外,你帖子中最后代码的第二句是否应改为:

if "%1"=="下午" if not "%2"=="12" set /a _hour=%_hour%+12
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
6 发表于 2005-11-11 19:13 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
UID 43709
性别 男
状态 离线
多谢willsort兄指点.

我有个请求,希望大哥能给予帮助:

能否把以下代码中红色部分说明一下,如果可以的话,能否把if中与之相关的资料给我一份?因为我在CMD下查不到这些资料.在google上翻了十几页也找不到.

if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1%
7 发表于 2005-11-12 18:44 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re voiL:

红色字体所示的代码是环境变量的引用特性,与 if 无关。请查阅命令环境变量设置命令 set 的帮助文档,简单的用法是在CMD下使用 set /?。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
8 发表于 2005-11-12 22:31 ·  中国 广东 肇庆 四会市 电信
中级用户
★★
积分 384
发帖 189
注册 2005-10-19 13:12
UID 43709
性别 男
状态 离线
OK.谢了.
论坛跳转: