批量IF导致小时不显示

时间:2012-09-11 07:32:10

标签: windows batch-file cmd backup

我有一个脚本,它执行一个简单的XCOPY例程来备份我们所有的公司文件:

@echo off
IF %time:~0,2% GTR 7 (
    IF %time:~0,2% LSS 21 (

    XCOPY "R:\Sage Src" "S:\lastdata" /D /Y /E /R /K /C /H /I >> S:\sageBackupLog-%date:~-4,4%-%date:~-7,2%-%date:~-10,2%-hour%time:~0,2%.txt

    XCOPY "R:\importantStuff" "V:\lastdata" /D /Y /E /R /K /C /H /I 
    EXIT /B 0
    )
)

但是,自从将它们全部包含在两个IF语句中之后,它就不再输出小时了。

我已尝试过set %hour%=%time:~0,2%但它不起作用,返回无效参数错误。

1 个答案:

答案 0 :(得分:1)

这里有两个主要问题。

首先,将set命令更改为:set hour=%time:~0,2%hour,不附上% - 标志)

接下来的事情是,像9点钟这样的单个数字小时值的时间将打印如下:

" 9:00:00.00"

在第一个数字前面有一个前导空格。这是您的错误消息的原因,因为您的文件名可能会解析为:

sageBackupLog-2012-09-11-hour 9.txt

这实际上形成了两个参数,因为名称未包含在"

要克服这个并在这些时间打印前导零,您可以使用第二个set语句进行字符串替换,将空格更改为零:

set hour=%time:~0,2%
set hour=%hour: =0%

然后,您可以在脚本中安全地使用%hour%代替%time:~0,2%

希望有所帮助。