我正在尝试运行批处理文件,该文件针对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%
的值?
答案 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