批处理文件日期变量和输出问题

Batch File Date Variable and Output Issue

我有一个批处理文件,它将日期格式设置为 YYYYMMDD 并将其存储为变量。但是,当我想生成文件名中包含日期的文本输出文件时,它会删除日期之后的所有内容。有人可以帮忙吗?您会注意到在我的示例中您将获得一个带有文本的输出文件,但文件名将是日期并且 .txt 扩展名被删除。

@echo off
SETLOCAL ENABLEEXTENSIONS
if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
  for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
    set '%%a'=%%i
    set '%%b'=%%j
    set '%%c'=%%k))
if %'yy'% LSS 100 set 'yy'=20%'yy'%
set Today=%'yy'%-%'mm'%-%'dd'% 
ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%

set mydate=%V_Year%%V_Month%%V_Day% 
echo text for output file > %mydate%.txt

您的最终 SET 语句有一个不需要的尾随 space。这导致重定向变为
> 2015-01-12 .txt变量展开后。我想你现在可以明白它失败的原因了。

当然,您可以简单地从批处理脚本中删除有问题的 space。但是有一个简单的策略可以防止无意的尾随字符——将整个 SET 表达式括在引号内。最后一个引号后的所有 "normal" 文本都将被安全地忽略,因此无意的尾随 space 不会导致问题。 &|> 等特殊字符在最后一个引号后仍然有意义。

set "var=value" Everything after the last quote is ignored/effectively a comment

重要的是,开头引号在变量名之前。