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

Date 批处理文件日期变量和输出问题,date,batch-file,output,Date,Batch File,Output,我有一个批处理文件,它将日期格式化为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 deli

我有一个批处理文件,它将日期格式化为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语句有一个不需要的尾随空格。这会导致重定向变为
变量展开后的
>2015-01-12.txt
。我想你现在可以明白为什么它失败了

当然,您可以简单地从批处理脚本中删除有问题的空间。但是有一个简单的策略可以防止意外的尾随字符——将整个集合表达式括在引号内。最后一个引号后的所有“正常”文本都将被安全地忽略,因此不经意的尾随空格不会导致问题。像
&
|
等特殊字符在最后一个引号后仍然有意义

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

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

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

当然,您可以简单地从批处理脚本中删除有问题的空间。但是有一个简单的策略可以防止意外的尾随字符——将整个集合表达式括在引号内。最后一个引号后的所有“正常”文本都将被安全地忽略,因此不经意的尾随空格不会导致问题。像
&
|
等特殊字符在最后一个引号后仍然有意义

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

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

Insert
echo--%mydate%--
设置后,检查其输出。有更好的方法来获取日期/时间-独立于区域设置。谢谢,肯。然而,你所做的只是为我提供了另一种格式化日期的方法。虽然这很酷,而且更简单,但我的问题是输出文件。当我尝试在文件名中使用日期变量时,它会去掉.txt扩展名。你工作太辛苦了
SET Today=%Date:~6,4%%Date:~0,2%%Date:~3,2%
适用于美国日期格式;如果需要,您可以调整不同位置的数字以使用您的格式。使用
echo%today%
检查输出。这些数字表示从X开始的Y字符的子字符串。例如,第一个表示从日期输出的索引6开始,获取4个字符。一个两行批处理文件(在| x |处有单独的行)
SET Today=%Date:~6,4%%Date:~0,2%%Date:~3,2%|x|ECHO Test output>%Today%.txt
留给我的是
20160112.txt
,大小为14字节,只有一行文本读取
测试输出
。设置后插入
ECHO-->mydate%-
,检查其输出。有更好的方法来获取日期/时间-独立于区域设置。谢谢,肯。然而,你所做的只是为我提供了另一种格式化日期的方法。虽然这很酷,而且更简单,但我的问题是输出文件。当我尝试在文件名中使用日期变量时,它会去掉.txt扩展名。你工作太辛苦了
SET Today=%Date:~6,4%%Date:~0,2%%Date:~3,2%
适用于美国日期格式;如果需要,您可以调整不同位置的数字以使用您的格式。使用
echo%today%
检查输出。这些数字表示从X开始的Y字符的子字符串。例如,第一个表示从日期输出的索引6开始,获取4个字符。一个两行批处理文件(在| x |处有单独的行)
SET Today=%Date:~6,4%%Date:~0,2%%Date:~3,2%|x|ECHO Test output>%Today%.txt
留给我的是
20160112.txt
,大小为14字节,只有一行文本读取
测试输出
。我说的是:
插入ECHO--%mydate%--设置之后,检查它的输出。
谢谢。引语起了作用。Stephan:我也做了echo测试,但您没有看到尾随空格,我想这就是问题所在。我说的是:
Insert echo--%mydate%--设置后,检查它的输出。
谢谢。引语起了作用。Stephan:我也做了echo测试,但你没有看到尾随空格,我想这就是问题所在。