Board logo

标题: [请教]如何在批处理中判断日期? [打印本页]

作者: yaomm123456     时间: 2006-9-28 06:55    标题: [请教]如何在批处理中判断日期?

判断今天是否是20号
如果是就执行拷贝命令

批处理怎么编?请教
(不显示DOS运行窗更好)
谢!


————————————俺是分割线——————————————


*********************************
                     版务记录
*********************************
操作:       更改标题
原因:       原格式不符版规
原标题:    新手求教
执行:       3742668
处罚:       初犯,赦之。
备注:       1.建议发贴前看看置顶版规
              2.如何更改标题?
                 点击所发贴右下角
                 编辑
按钮,然后进行编辑。
**********************************


[ Last edited by 3742668 on 2006-9-29 at 09:07 ]
作者: namejm     时间: 2006-9-28 07:05
  XP下判断当天是否是系统设置中的20号,可以用 if %date:~-2% equ 20 的格式。

  不显示DOS运行窗口已经是老生常谈的话题了,光靠批处理命令是实现不了的,楼主还是打消这个念头吧——除非借助第三方软件或其他语言。
作者: yaomm123456     时间: 2006-9-28 21:14
2楼的朋友
我试了,好象不行呀
作者: NaturalJ0     时间: 2006-9-28 21:26
我记得 namem 好像说过他时间后面没有星期几的
你换这个试试看吧 %date:~8,2%
作者: namejm     时间: 2006-9-28 21:33


  Quote:
Originally posted by NaturalJ0 at 2006-9-28 21:26:
我记得 namem 好像说过他时间后面没有星期几的
你换这个试试看吧 %date:~8,2%

  是的,我的时间后面有时候有星期几,但是绝大部分时候是没有的,不知道是哪个地方设置出问题了。还是你的方法要通用一点。另外,用下面截取字符的方法也可以,只不过要稍微麻烦一点:
@echo off
for /f "tokens=3 delims=-" %%i in ("%date%") do echo 当前系统日期为 %%i 日
pause

作者: fastslz     时间: 2006-9-28 21:47

@echo off
if "%date:~8,-4%" equ "20" (
echo 这里你就是执行拷贝命令
) ELSE (
echo 今天不是20号
)
PAUSE
[ Last edited by fastslz on 2006-9-28 at 21:51 ]
作者: jastyg     时间: 2006-10-1 03:29
%date%在XP和2000下的结果是相反的一个星期在前面一个在后面
作者: 9527     时间: 2006-10-1 03:34
是的,2000和XP的日期显示是这样的,不过楼主已经说过啦,是XP系统,其实是2000也是好处理的,用VER命令的输出判断一下系统类型,然后在进行相应的处理便是啦........
作者: lxmxn     时间: 2006-10-1 04:03


  Quote:
Originally posted by fastslz at 2006-9-28 21:47:
@echo off
if "%date:~8,-4%" equ "20" (
echo 这里你就是执行拷贝命令
) ELSE (
echo 今天不是20号
)
PAUSE
[ Last edited by fastslz on 2006 ...

执行你这个怎么成了这个了?
C:\>兀
'兀' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

????????
作者: electronixtar     时间: 2006-10-1 06:00
不要保存成unicode的txt
作者: lxmxn     时间: 2006-10-1 09:42
那保存为什么?
作者: fastslz     时间: 2006-10-1 10:17
粘贴到记事本》保存类型》所有文件》?.cmd》编码还是默认的ANSI
作者: lxmxn     时间: 2006-10-1 11:44
多谢!
顺便问一下,unicode 和 ansi 有什么区别?
作者: electronixtar     时间: 2006-10-1 12:05
这个问题自己搜索
作者: fastslz     时间: 2006-10-1 12:15
这一下子可说不明白的,引用下willsort 版主关于编码一贴

  Quote:
willsort at 2006-7-23 12:15:
      记事本程序在保存一篇新建的文档时,如果没有指定编码类型,会使用缺省的ANSI类型(对于中文版来说,对应的就是GB码)。

       而在打开一篇已创建的文档时,它会分析文档的编码类型,它首先判断文档头部有无BOM(Byte Order Mark,字节序标记,长度为2~3字节),如果有则根据其内容判断编码类型,FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)[1]。

       因为事实上有很多非ANSI编码的文档是没有任何BOM的“纯文本”,所以对这些文档不能简单的判断为ANSI编码。而需要使用一系列的统计学算法根据文档内容来猜测文档编码。记事本使用了 IsTextUnicode 函数来判断是否为 Unicode/Unicode big endian 编码,使用 IsTextUTF8 判断是否为 UTF8 编码。

      但既然是统计学算法,就难免存在误判,尤其在文档内容过短时,由于样本的容量太小,这种误判的概率会显著增大。比如那个有名的微软与联通有仇的笑话,就是记事本在打开只有"联通"二字的ANSI编码文档时,IsTextUTF8 函数将其误判为UTF8编码[2];同样的误判也发生在 IsTextUnicode 函数上,比如具有 “this app can break”这种具有4335结构的文档,会被误判为 Unicode 编码[3][4]。

      需要说明的是,这种误判的可能性是建立在文本较短且其字节位特征不被干扰的前提上的。如果将上述的文本做稍许修改(即使只是增加一个回车),则误判很难再发生。

      而 yuanyong630 兄方案的特殊性在于,它的字节串不但具有Unicode特征,而且很长达到了1288字节,也就是说它的Unicode特征性很强,所以可以抵抗一些较短的不具有Unicode特征串的干扰,这是由统计学的规律所决定的。但是在干扰串稍长时,Unicode的特征将会受到显著干扰,直至被 IsTextUnicode 函数认定为非 Unicode。所以,有些朋友总是无法测试成功,应该是与附加的批处理代码长度和内容相关。大家可以测试一下[5]中的代码。

      因为其他的编辑器(比如 Word / Wordpad / EditPlus / UltraEdit)使用了更新的编码类型判断算法,所以在 Unicode 判断上改进了不少,而 UTF8 的判断仍然不尽如人意。但因为理论上来说完全准确地算法并不存在,所以我们只能依靠避免使用无BOM的非ANSI文档,或者打开文档时手动指定编码类型。

      另外,如果使用记事本保存了这些误判了编码类型的文件,则将难以恢复。如果使用误判编码保存,则将给原文档加上BOM标记,则使用其他编辑器也再无法观察到原文档。如果使用 ANSI 编码保存,则原文档将会被当作 Unicode 文档而被转换,还原的可能性接近于零。

[1] Unicode简介
http://my.opera.com/neutronstar/blog/index.dml/tag/编码

[2] 微软为什么和联通有仇
http://blog.vckbase.com/localvar/archive/2005/07/12/9510.aspx

[3] Notepad bug? Encoding issue?
http://weblogs.asp.net/cumpsd/archive/2004/02/27/81098.aspx

[4] Bush Hid The Facts
http://www.shoutwire.com/comments/16341/Bush_Hid_The_Facts

[ Last edited by fastslz on 2006-10-1 at 12:16 ]
作者: lxmxn     时间: 2006-10-2 08:51

谢谢楼上朋友的热心,不过我在看"微软为什么和联通有仇"这篇文章时,了解了作者的分析过程和解释,其中有一个是叫我们验证IsTextUnicode函数,他写了这个函数:IsTextUnicode("联通",4,nul),请问这个函数如何验证?是要在特定的编程工具上验证吗?

作者: pipij     时间: 2008-2-10 15:47
echo %date:~12,4%
作者: pinghu     时间: 2008-2-12 19:26
答13楼的,unicode中每个字符占两个字节,ascii中每个字符占一个字节,
这是最明显的区别,两个不同的字符集怎么能拿来比较呢