我正在尝试整理一些代码。现在我有:
SET VAR=%TIME:.=&rem.%
SET VAR=%VAR:,=&rem.%
SET VAR=%VAR::=_%
它可以工作,但是我想将它变成单线。这样的事情(无效):
SET VAR=% % %TIME:.=&rem% :,=&rem.% ::=_%
我可以用简洁,简单的语法实现类似的目的吗?
答案 0 :(得分:3)
尽管可以在一行中完成(需要delayed expansion),但我认为它没有可读性:
@echo off
setlocal enabledelayedexpansion
set "var=%time:~0,8%" & set "var=!var::=_!"
echo %var%
我建议将格式移动到子例程。 (不完全是单行代码,而是使您的主要代码保持干净和可读性。)
@echo off
call :FormatTime var="%time%"
echo %var%
goto :eof
:FormatTime
set "_=%~2"
set "_=%_:~0,8%" :: get 'HH:MM:SS'
set "_=%_: =0%" :: replace ' ' with '0'
set "%1=%_::=_%" :: replace ':' with '_'
goto :eof
call
定义结果的变量名(此处为var
)和要格式化的字符串(此处为%time%
)。通常,两个参数之间用空格隔开,但是由于=
还充当标准定界符,因此我们可以使用它使该行更具可读性(直观)。
将字符串括在引号("%time%
中)使我们能够捕获空格(" 8:12:00,99"
),以便能够将其替换为零。
我还使用了另一种剥离毫秒部分(与语言无关)的方法。