Board logo

标题: [数值计算] 批处理怎样把截取的日期变量中的数值连起来? [打印本页]

作者: xxx701    时间: 2010-1-9 21:36     标题: 批处理怎样把截取的日期变量中的数值连起来?

  1. set year=%date:~0,4%
  2. set month=%date:~5,2%
  3. set day=%date:~8,2%
  4. set tm1=%year%%month%%day%
  5. set tm2=20100101
复制代码
这其中的 tm1=%year%%month%%day%  在DOS里是 2010 01 09
怎么连不起来呀..那位兄弟帮忙看下.
作者: xxx701    时间: 2010-1-9 21:39     标题: 补充

  1. set year=%date:~0,4%
  2. set month=%date:~5,2%
  3. set day=%date:~8,2%
  4. set tm1=%year%%month%%day%
  5. set tm2=20100109
  6. if %tm1%==%tm2% goto ct
  7. md c:\22
  8. PAUSE
复制代码
我想把数值等于20100109   而不是2010 01 09  
谢谢
作者: Batcher    时间: 2010-1-9 21:44

  1. set "year=%date:~0,4%"
  2. set "month=%date:~5,2%"
  3. set "day=%date:~8,2%"
  4. set "tm1=%year%%month%%day%"
复制代码

作者: 523066680    时间: 2010-1-9 22:08

是在纯dos里面操作吗
如果是在windows的 cmd里面,我这样做
set dt=%date:~0,10%
set dt=%dt:-=%

[ 本帖最后由 523066680 于 2010-1-9 22:10 编辑 ]
作者: xxx701    时间: 2010-1-10 09:57     标题: 是纯DOS下,

我是为了前台POS机的一问题针对设定的,麻烦兄弟们啦
作者: xxx701    时间: 2010-1-11 23:15     标题: 我在在纯DOS下的定时

我在在纯DOS下的定时设置
到底是怎样改呢.
作者: Batcher    时间: 2010-1-12 00:00

3楼的代码跟你的代码相比有哪些不同?
作者: xxx701    时间: 2010-1-12 10:18     标题: 纯DOS下总是说语法错误

没什么不同,,但例如下面的句子,我在WINDOS中可以使用,但在纯DOS下总是说语法错误..郁闷..
  1. set tm1=%date:~0,10%
  2. if %tm1%==2010-01-11 goto ct
  3. md c:\22
  4. PAUSE
  5. :ct
  6. md c:\ct
复制代码

作者: Batcher    时间: 2010-1-12 10:25     标题: 回复 8楼 的帖子

你在Windows里面分别运行顶楼的代码,和3楼的代码,结果是一样的?结果都是用空格分开的?能否把结果贴出来看看?

DOS里面的set命令是不支持的字符串截取的,报语法错误很正常,这有啥好郁闷的?
作者: xxx701    时间: 2010-1-12 11:24

我的主要意要还是想在纯DOS下进行一个定时设置,如果SET不能,那到底怎样才行呢...不好意思,我对批处理初学乍练,但是最近又急用.静不下心来看资料,,麻烦各位啦.
作者: qzwqzw    时间: 2010-1-12 12:08

“在DOS里是 2010 01 09”
这是不可能的
正如Batcher所说
“DOS里面的set命令是不支持的字符串截取的”
DOS甚至是没有预置变量%date%的
出来这个结果就证明你的环境不是纯DOS

怀疑你的POS机是Windows
只不过可能区域不对
所以日期字符串格式不对
使if 后面出现空格或非法字符
导致语法出错

你在你的所谓DOS环境下
echo %date%
看一下结果是什么就知道了

另外记住
使用if的时候别忘了加上引号或其它防空字符
if “%tm1%”==“2010-01-11” goto ct
这样可以避免语法错导致程序终止
作者: Batcher    时间: 2010-1-12 15:11     标题: 回复 11楼 的帖子

我的猜测:顶楼的代码是在Windows中执行的,有空格是因为每行set命令都是以空格结尾的,这也是我在3楼贴代码的原因^_^
作者: Batcher    时间: 2010-1-12 15:33     标题: 回复 10楼 的帖子

DOS里面获取系统日期、时间是个比较复杂的事情,如果静不下心来,那就麻烦了。

参考:DOS系统中获取并分解系统日期时间的批处理
http://www.bathome.net/thread-6969-1-1.html
作者: Rstv    时间: 2010-1-12 15:49

原帖由 Batcher 于 2010-1-12 15:11 发表
我的猜测:顶楼的代码是在Windows中执行的,有空格是因为每行set命令都是以空格结尾的,这也是我在3楼贴代码的原因^_^


不是猜测,是事实。鼠标一拖就看出来啦。。。

批处理一个字符都不能错啊。。。

看来 set "name=value" 加引号是个好习惯,以前一直。。。因为怕了“引号”~~~
作者: qzwqzw    时间: 2010-1-12 16:01

判定定时执行
和将日期分段获取没有必然的联系
楼主把问题想的复杂了

DOS和Windows下的思路是截然不同的
如果真的是DOS
可以试试
  1. echo.|date|find "2010-01-12">nul
  2. if not errorlevel 1 goto ct
复制代码

作者: xxx701    时间: 2010-1-18 22:19     标题: 真的是纯DOS

真的是纯DOS,只不过我喜欢在WINDOWS上写好后再在DOS上试。。楼上的方法我刚试过还是不行。
还是显示错误命令。在WINDOWS下是没问题的。麻烦各位仁兄啦。

到底怎样才能在DOS下定时执行呢。。
作者: qzwqzw    时间: 2010-1-19 07:55

首先在windows下
开始-运行-command-可以得到接近纯DOS的测试环境
建议不要再在cmd下测试了
没有任何意义

另外
建议在你的DOS环境下
运行
ver
find /?
set path
这几个命令看看结果如何
你的环境不单是纯DOS的问题

另外
有可能
把你的程序的全部内容贴上来
让我们了解你的最终意图是什么
作者: xxx701    时间: 2010-1-19 10:44     标题: 这是在前台POS机的显示

c:\ver
windows 98 (version 4.10.1998)

c:\fidn /?
bad command or file name
c:\set path
syntax error
作者: xxx701    时间: 2010-1-19 10:47     标题: 另外我的内容就是开始的一个代码

  1. set year=%date:~0,4%
  2. set month=%date:~5,2%
  3. set day=%date:~8,2%
  4. set tm1=%year%%month%%day%
  5. set tm2=20100109
  6. if %tm1%==%tm2% goto ct
  7. md c:\22
  8. PAUSE
  9. :ct
  10. set ss=%time:~0,2%
  11. set tm3=%ss%
  12. set tm4=10
  13. md c:\ct
  14. pause
  15. ECHO JJJ
  16. PAUSE
复制代码
主要目的是在指定的某一天进行一个目录的建立和删除...也不是非要用我的代码进行修改.那位仁兄有更好也行.先行谢过.
作者: xxx701    时间: 2010-1-21 11:06     标题: ??????????

???????????????????????
作者: qzwqzw    时间: 2010-1-21 20:56

楼主的问题环境
果然跌掉所有人的眼镜
不是大家所想的Windows CMD
而是所谓的Windows 98 command
这是一个很接近纯DOS的命令行环境
但绝非楼主信誓旦旦所说的“纯DOS”

照道理
在这个环境下
我的Echo.|date|find应该也可以适用
但鉴于楼主的急切
以致于连find命令敲错了都顾不上修改
还是将我的想法变成了一段演示代码
可以复制粘贴过去试试
日期可以根据自己的需要进行修改
  1. @echo off
  2. rem 在指定日期2010-01-21建立目录c:\ct,否则建立c:\22
  3. echo.|date|find "2010-01-21">nul
  4. if not errorlevel 1 goto ct
  5. if not exist c:\22\nul echo md c:\22
  6. if not exist c:\22\nul md c:\22
  7. goto end
  8. :ct
  9. if not exist c:\ct\nul ECHO md c:\ct
  10. if not exist c:\ct\nul md c:\ct
  11. :end
复制代码

作者: xxx701    时间: 2010-1-24 11:57     标题: 晕,兄弟不管怎样还是谢谢你.

楼上的兄弟,上面是我打错了,,,,
find /?
bad command or file name
是一样的,
你的代码我也已经在里面测试,结果还是
bad command or file name
但在,WINDOWS下的COMMAND里却是成立的..

,,,,,我对批处理不大熟悉,   呵,望多费心..急..谢谢
作者: Batcher    时间: 2010-1-24 11:59     标题: 回复 22楼 的帖子

在你的Win98的DOS里面找找find.exe在什么地方
作者: xxx701    时间: 2010-1-24 13:32

没有这个文件呀?,那不是要下一个?
作者: xxx701    时间: 2010-1-24 13:34

我从别的位置复制了文件,已经行那,,呵呵,   谢谢楼上的各位兄弟...谢谢...
作者: minoboy    时间: 2010-1-24 14:32

find是外部命令有些D0S版本是没有的
作者: minoboy    时间: 2010-1-24 14:32     标题: 意思

find是外部命令有些D0S版本是没有的




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2