如何在批处理文件中使用变量%TIME:~0.2%,以便带有前导空格的时间不会导致错误?

时间:2013-05-06 15:12:02

标签: datetime batch-file formatting

我正在尝试运行批处理文件,该文件针对XML文件运行XSLT转换并写出第二个XML文件。

此XML文件名由批处理文件中的以下行确定:

 ICS_%DATE:~-4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%_%TIME:~3,2%_DATA.xml

当时间具有前导空格(即上午10:00之前的任何时间)时,变量%TIME:~3,2%将返回带有前导空格的结果,这会导致文件名被截断。结果文件为空。

如果我在上午10:00之后运行批次,一切正常。如何生成类似于在上午10:00之前工作的%TIME:~3,2%的值?

8 个答案:

答案 0 :(得分:12)

这将解决名称问题中的空间,并将其替换为零,以便在列表中正确排序。

set name=ICS_%DATE:~-4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%_%TIME:~3,2%_DATA.xml
set name=%name: =0%

答案 1 :(得分:3)

这个怎么样?

@ECHO OFF
FOR /F "tokens=1-4 delims=., " %%i IN ('DATE /t') DO SET cpdate=%%k_%%j_%%i
FOR /F "tokens=1-4 delims=:"  %%b IN ('TIME /T') DO SET cptime=%%b_%%c

set filename=blabla_%cpdate%_%cptime%_%TIME:~-5,2%.xml

echo %filename%

此处的语言环境是德语,因此您可能需要根据需要调整“set cpdate ...”中的顺序。

答案 2 :(得分:2)

(这是一个老问题,但这个答案对其他人有帮助。)

使用%time: =%删除时间变量中的空格。 例如:

C:\>echo %time%
 04:00:00,00

C:\>echo %time: =%
04:00:00,00

您可以使用此方法将时间变量保存到另一个,然后使用该方法:

set "tim2=%time: =%"

答案 3 :(得分:1)

如下设置小时值的变量可以解决我的问题:      FOR /F "tokens=* delims= " %%a IN ("%TIME:~0,2%") DO SET hour=%%a

答案 4 :(得分:0)

我用一个简单的技巧来做到这一点:

set h=1%TIME:~0,2%
set /a h=%h%-100

答案 5 :(得分:0)

REM此.bat脚本为您提供一个参数时间文本,其中包含零而不是空格

@echo off

set timetext=%time:~0,2%%time:~3,2%
echo TIME BEFORE WITH SPACE %timetext%

set digit1=%time:~0,1%

if "%digit1%"==" " set digit1=0

set timetext=%digit1%%time:~1,1%%time:~3,2%
echo TIME AFTER WITH ZERO.. %timetext%

pause

答案 6 :(得分:0)

这在Dos Batch中可能更有用~~试试这个

if "%time:~0,1%" == " " (set dtstamp=0%time:~1,1%) ELSE set dtstamp=%time:~0,2%
echo dtstamp=%date:~6%%date:~3,2%%date:~0,2%_%dtstamp%%time:~3,2%

答案 7 :(得分:0)

set time=%time:~0,5%
if "%time:~0,1%" == " " set time=0%time:~1,5%
echo %time:~0,2%%time:~3,2%

我的时间是:9:48:27,00

如果缺少它,我添加零,并且

echo%time:〜0.2 %% time:〜3.2%现在是0948