从命令提示符执行有效,但不能从批处理文件执行
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%
我正在尝试在批处理文件中为明年设置一个变量,即。即,如果当前年份是 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%