|
voiL
中级用户
积分 384
发帖 189
注册 2005-10-19
状态 离线
|
『楼 主』:
(已结)CMD下如何把AM/PM的时间方式更改为24小时制并输入到系
环境:WinXP CMD(CMD Ver 5.1.2600)
我需要向网络内一台叫A1(192.168.0.112)的计算机校对时间,然后把本地时间改成与A1的一样.
然而我用net time之后,输出的文本是如下格式的.
Quote: | \\192.168.0.112 的当前时间是 2005/11/8 下午 09:47
命令成功完成。 |
|
我把09和47滤出来了,也导入到系统了.
但当前时间可是下午的9点多啊,也就是21点多.
请教高手们有没办法把09改成21.
请勿使用第三方工具.
我所写的批处理如下:
Quote: | 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 ]
|
|
2005-11-8 22:13 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
2 楼』:
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:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2005-11-9 19:06 |
|
|
voiL
中级用户
积分 384
发帖 189
注册 2005-10-19
状态 离线
|
『第
3 楼』:
多谢willsort的指点,试用过您给出的代码,确实可行.
只是修改本地时间那里不能实现,必须把"/t"去掉才行.
Quote: | time /t %_hour%:%3>nul 应当改为 time %_hour%:%3>nul |
|
|
|
2005-11-9 20:16 |
|
|
voiL
中级用户
积分 384
发帖 189
注册 2005-10-19
状态 离线
|
『第
4 楼』:
测试环境:WinXP CMD(CMD VER 5.1.2600)
经过反复试验,发现willsort兄的代码还有些BUG.
如果192.168.0.112的机子时间是12:00~12:59的时候.
net time \\192.168.0.112得到的结果是:
Quote: | \\192.168.0.112 的当前时间是 2005/11/10 下午 12:22
命令成功完成。 |
|
到这里,willsort兄应该能看出问题了吧??
在经过以下代码运算后,会把时间改成 24:22(一个系统不能接受的时间)
Quote: | if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1%
if "%1"=="下午" set /a _hour=%_hour%+12 |
|
我把代码改成以下样式之后,就没有出现过同样的问题.
Quote: | if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1%
if "%1"=="下午" if "%2"=="12" set /a _hour=%_hour%+12 |
|
|
|
2005-11-10 12:45 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
5 楼』:
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:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2005-11-10 19:45 |
|
|
voiL
中级用户
积分 384
发帖 189
注册 2005-10-19
状态 离线
|
『第
6 楼』:
多谢willsort兄指点.
我有个请求,希望大哥能给予帮助:
能否把以下代码中红色部分说明一下,如果可以的话,能否把if中与之相关的资料给我一份?因为我在CMD下查不到这些资料.在google上翻了十几页也找不到.
Quote: | if "%1"=="下午" if "%_hour:~0,1%"=="0" set _hour=%_hour:~-1% |
|
|
|
2005-11-11 19:13 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
7 楼』:
Re voiL:
红色字体所示的代码是环境变量的引用特性,与 if 无关。请查阅命令环境变量设置命令 set 的帮助文档,简单的用法是在CMD下使用 set /?。
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2005-11-12 18:44 |
|
|
voiL
中级用户
积分 384
发帖 189
注册 2005-10-19
状态 离线
|
|
2005-11-12 22:31 |
|