5

我正在尝试运行一个批处理文件,该文件对 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 之后运行批处理,一切正常。如何生成类似于%TIME:~3,2%上午 10:00 之前工作的值?

4

8 回答 8

16

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

set name=ICS_%DATE:~-4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%_%TIME:~3,2%_DATA.xml
set name=%name: =0%
于 2013-05-06T22:46:20.883 回答
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...”中的顺序。

于 2013-05-06T15:54:35.870 回答
2

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

using%time: =%去掉了时间变量中的空格。例子:

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

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

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

set "tim2=%time: =%"
于 2015-03-15T07:20:03.973 回答
1

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

于 2013-05-06T16:16:55.647 回答
1
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

于 2020-07-10T10:30:48.180 回答
0

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

set h=1%TIME:~0,2%
set /a h=%h%-100
于 2013-12-16T18:26:39.800 回答
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
于 2014-02-28T09:23:54.210 回答
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%
于 2015-02-02T09:51:08.773 回答