Batch file 空白的批量检查

Batch file 空白的批量检查,batch-file,if-statement,whitespace,Batch File,If Statement,Whitespace,我想用创建时的时间戳命名批处理日志文件。但如果时间小于上午10点,则会出现问题。然后我得到一个空白,文件名将被破坏。我试图通过IF捕捉,但不知何故它不起作用,cmd窗口立即关闭: set f_null=%time:~-11,1% If /i %f_null% == " " (set zeitstempel_start=%DATE:~-4%%DATE:~-7,-5%%DATE:~-10,-8%0%time:~-10,1%%time:~-8,2%%time:~-5,2%) else

我想用创建时的时间戳命名批处理日志文件。但如果时间小于上午10点,则会出现问题。然后我得到一个空白,文件名将被破坏。我试图通过IF捕捉,但不知何故它不起作用,cmd窗口立即关闭:

set f_null=%time:~-11,1%
If /i %f_null% == " " (set zeitstempel_start=%DATE:~-4%%DATE:~-7,-5%%DATE:~-10,-8%0%time:~-10,1%%time:~-8,2%%time:~-5,2%) else
                      (set zeitstempel_start=%DATE:~-4%%DATE:~-7,-5%%DATE:~-10,-8%%time:~-11,2%%time:~-8,2%%time:~-5,2%)

set startzeit=Start: %date% %time:~-11,2%:%time:~-8,2%:%time:~-5,2%
set datei_name=%zeitstempel_start%
echo %startzeit% > %def_log_dir%\%datei_name%.log 
知道问题出在哪里吗

set zeitstempel_start=%DATE:~-4%%DATE:~-7,-5%%DATE:~-10,-8%%time:~-11,2%%time:~-8,2%%time:~-5,2%
set zeitstempel_start=%zeitstempel_start: =0%
将任何空格替换为
0

您的
if
问题有两方面:

  • If/i%f_null%==”
    f_null
    为时,空格解析为
    If/i==”
    ,这是一个语法错误<代码>如果/i“%f_null%”==“工作-比较非常文字化

  • 序列
    )else(
    必须全部在同一行上,而不是像您发布的那样分成两行。有可能(事实上是常见的)将
    )else(
    放在单独的行上


  • 如果从提示符处运行批处理,您可以看到正在生成的错误消息。

    通过解析
    wmic os get localdatetime
    的输出可以避免整个问题,该输出不包含空格。谢谢!但是如果需要,我如何搜索空白?这是一个非常广泛的问题。方法可能取决于n为什么要检测空白,以及数据的位置。例如,要找出“var是否包含空白字符?”可以使用
    如果“%var%”==%var:=\uu3%(echo no whitespace)