Windows 如果导致小时不显示,则批处理

Windows 如果导致小时不显示,则批处理,windows,batch-file,cmd,backup,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例程,用于备份所有公司文件:

@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语句中之后,它就不再输出小时


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

这里有两个主要问题

首先,将
set
命令更改为:
set hour=%time:~0,2%
hour
,不包含
%
-符号)

下一件事是,具有一位数小时值(如9:00)的时间将打印为:

" 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%

希望有帮助