我需要编写代码,以替换%test%
变量的时间字符串的空白,并以foo01_08_2018-06_07_47.war
格式输出。
下面的代码(如果与IF语句隔离)返回正确的字符串,但是,此代码在某处返回语法错误。我正在使用Windows 10,该批处理文件应该可以在Windows Server 2016操作系统上运行。
@echo off
SET test=" 6:07:47,43"
IF "%test%"=="%test: =%" (
echo foo%date:~0,2%_%date:~3,2%_%date:~6,6%-0%time:~1,1%_%time:~3,2%_%time:~6,2%.war
) ELSE (
echo foo%date:~0,2%_%date:~3,2%_%date:~6,6%-%time:~0,2%_%time:~3,2%_%time:~6,2%.war
)
pause
关于此IF语句出了什么问题的任何想法?我尝试了stackoverflow提供的无数解决方案,它们似乎都已过时或在我的情况下不起作用。
答案 0 :(得分:4)
您的if语句正在比较"" 6:07:47,43""
和""6:07:47,43""
。语法错误是由于双"
引起的,一次来自IF "%test%"=="%test: =%"
,一次来自变量值" 6:07:47,43"
。
只需将它们从set语句或if语句中删除。 if语句本身不需要引号,因此if %test%==%test: =%
就可以了。如果%test%
为空,则if语句将出现另一个语法错误(不进行任何比较),因此建议设置不带引号的变量。
SET test= 6:07:47,43
一个未公开的功能是您可以在"
中设置set语句。这将产生相同的变量值,但会保存为&
和值中的其他特殊字符。
SET "test= 6:07:47,43"
答案 1 :(得分:2)
带引号的SET的正确语法是:mapStateToProps
而不是SET "foo=bar"
将第二行更改为
SET foo="bar"
似乎可以解决问题
答案 2 :(得分:1)
您应该考虑使用一种方法来以一致的格式获取日期和时间。在批处理文件中,您可以使用WMIC和Powershell进行此操作。
使用WMIC,输出将始终采用以下格式:YYYYYMMDDhhmmss
for /f "tokens=2 delims==." %%G in ('wmic OS Get localdatetime /value') do set "dt=%%G"
在Powershell中,您可以控制输出格式。您可以重新排列任何日期和时间值,并使用所需的任何分隔符。
FOR /F "usebackq delims=" %%G IN (`powershell "(Get-Date).ToString('yyyy-MM-dd-hh-mm-ss')"`) DO set dt=%%G