Board logo

标题: [已解决]批处理调用gawk格式化输出日期时间出现缺少前导/前缀0是什么原因 [打印本页]

作者: shootman2    时间: 2015-6-1 20:24     标题: [已解决]批处理调用gawk格式化输出日期时间出现缺少前导/前缀0是什么原因

本帖最后由 pcl_test 于 2016-6-15 01:34 编辑

当开启变量延迟后,执行如下语句结果中日期少了一个0,请大神帮助啊!!!

for /f "tokens=*" %%x in ('gawk "BEGIN{tstamp=mktime(\"2015 06 01 18 30 30\");print strftime(\"%%Y/%%m/%%d %%A %%H:%%M:%%S\",tstamp);}"') do echo %%x
2015/06/1 星期一 18:30:30

怎样才能得到如下结果
2015/06/01 星期一 18:30:30
作者: gawk    时间: 2015-6-1 22:18

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%x in ('gawk "BEGIN{tstamp=mktime(\"2015 06 01 18 30 30\");print strftime(\"%%Y/%%m/%%d %%A %%H:%%M:%%S\",tstamp);}"') do (
  4.     set n=%%x
  5.     echo !n!
  6. )
  7. pause
复制代码
我这里测试没有问题
作者: shootman2    时间: 2015-6-1 23:01

我这里测试没有问题
gawk 发表于 2015-6-1 22:18



    分析了半天,发现时这样的,我有个参数%%d,具体见如下代码

@echo off
setlocal enabledelayedexpansion
for /f "usebackq eol=# tokens=1-7 delims=|" %%a in ("%alt_list_file%") do (
        echo %%a--%%b--%%c--%%d & rem 这个地方的%%d的值是从文件中读出来的,值为1
        set almGenDate=2015 06 01 22 31 30
        for /f "tokens=*" %%x in ('gawk "BEGIN{tstamp=mktime(\"!almGenDate!\");print strftime(\"%%Y/%%m/%%d %%A %%H:%%M:%%S\",tstamp);}"') do set almSignDate=%%x  & rem 这个地方的%%d 本是个参数,将前面的%%d的值直接打印出来了
        echo !almSignDate!
)
pause

请大神,帮忙解决一下。。。
作者: terse    时间: 2015-6-1 23:15

  1. ...\"%%Y/%%2m/%%2d %%2A %%2H:%%2M:%%2S\"...
复制代码

作者: shootman2    时间: 2015-6-1 23:57

terse 发表于 2015-6-1 23:15



    问题解决了!非常感谢!!!

但是有些不好理解,再追问大神一下,%%2d是什么意思呢? 是第2个%%d呢?还是长度是2呢?
作者: terse    时间: 2015-6-2 00:01

这个是长度为2
作者: shootman2    时间: 2015-6-2 00:14

这个是长度为2
terse 发表于 2015-6-2 00:01



    那可以这样写吗?
    "%%4Y/%%2m/%%2d %%2A %%2H:%%2M:%%2S"
作者: terse    时间: 2015-6-2 01:02

回复 7# shootman2

可以
作者: gawk    时间: 2015-6-2 03:39

回复 3# shootman2


    建议把 for 循环的参数改成其它字母,以免混淆。




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