Windows cmd(.bat)中的嵌套运算符

时间:2018-11-14 08:17:58

标签: batch-file cmd

我正在尝试整理一些代码。现在我有:

SET VAR=%TIME:.=&rem.%
SET VAR=%VAR:,=&rem.%
SET VAR=%VAR::=_%

它可以工作,但是我想将它变成单线。这样的事情(无效):

SET VAR=% % %TIME:.=&rem% :,=&rem.% ::=_%

我可以用简洁,简单的语法实现类似的目的吗?

1 个答案:

答案 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"),以便能够将其替换为零。

我还使用了另一种剥离毫秒部分(与语言无关)的方法。