从命令提示符执行有效,但不能从批处理文件执行

executing from command prompt works but not from batch file

我正在尝试在批处理文件中为明年设置一个变量,即。即,如果当前年份是 2016,我希望将变量设置为 2017

我现在可以使用以下方法获取值:

SET /a sum=%date:~6%+1

我尝试将结果重定向到一个文件,如下所示:

SET /a sum=%date:~6%+1 >next_year.txt

如果我 运行 从命令提示符执行此操作,则它可以正常工作。但是,如果我在 .bat 文件和 运行 命令提示符中有这个文件,则会创建 next_year.txt 文件,但其中没有任何值。

我确定我在这里遗漏了一些愚蠢的东西,但我在兜圈子。

这是因为set /A的设计(所以不能改):

  • 在命令提示符 (cmd) 上下文中,set /A 将(最后)结果输出到控制台 window。例如,set /A X=1+2 将结果 3 回显到控制台,而 set /A x=1+2, y=x-1 回显 2(顺便说一下,没有尾随换行符)。
  • 相比之下,在批处理文件上下文中,set /A 命令不输出任何内容。

要获得 set /A 命令行的结果,您需要在下一行显式回显它,例如 echo %X%,参考上述示例中的第一个。当然,您可以将其重定向到文件中:

> "\path\to\file.txt" echo %X%