Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CMD:Can';t使用+;=操作人员_Batch File_Cmd - Fatal编程技术网

Batch file CMD:Can';t使用+;=操作人员

Batch file CMD:Can';t使用+;=操作人员,batch-file,cmd,Batch File,Cmd,我正在使用CMD命令处理一些变量。我可以给一个变量加1,但是如果这个变量是08或09,结果是1,而不是9或10。代码如下: setlocal EnableDelayedExpansion set day=08 echo Day:%day% set /a day+=1 echo Day:% day% 这适用于数字1-7和10之后。我需要将前导零添加到小于10的数字,因为否则,尽管在代码的其他部分显示了正确的值,但变量不会写入文本文件(稍后执行) Numeric values are decima

我正在使用CMD命令处理一些变量。我可以给一个变量加1,但是如果这个变量是08或09,结果是1,而不是9或10。代码如下:

setlocal EnableDelayedExpansion
set day=08
echo Day:%day%
set /a day+=1
echo Day:% day%
这适用于数字1-7和10之后。我需要将前导零添加到小于10的数字,因为否则,尽管在代码的其他部分显示了正确的值,但变量不会写入文本文件(稍后执行)

Numeric values are decimal numbers, unless
prefixed by 0x for hexadecimal numbers, and 0 for octal numbers.
So 0x12 is the same as 18 is the same as 022. Please note that the octal
notation can be confusing: 08 and 09 are not valid numbers because 8 and
9 are not valid octal digits.
设置/?


set/?

可以通过在命令提示窗口中运行
set/?
来读取命令帮助set。它解释了带前导0的数字被解释为八进制数字,请参见Windows命令解释器内部使用的带的函数为
0
(自动检测)

08
09
在八进制数字系统中无效,因此使用值
0
进行解释

这种情况下的一种解决方案是,首先在预处理状态期间使用字符串串联,将字符串
08
更改为
108
,并将
108
减去
99
,转换为整数,得到
08
09
以及
01
31
1

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "day=08"
echo Day: %day%
set /A day=1%day% - 99
echo Day: %day%
endlocal
上述批处理文件的输出为:

Day: 08
Day: 9
Day: 08
Day: 09
这里不需要延迟的环境变量展开,通常在算术表达式中根本不需要,这也可以通过命令SET来解释。当然,在命令块中定义或修改环境变量之前,在命令块中执行算术表达式之前,必须先执行字符串连接等异常。但是这些用例真的很少见

对于少于两位数的数字,当结果应再次以前导的
0
表示时,最好不要减去
99
,而是加上
1
,并在下一步中,在算术表达式求值后,将字符串中始终为3位数的最后两位数分配给环境变量

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "day=08"
echo Day: %day%
set /A day=1%day% + 1
set "day=%day:~-2%"
echo Day: %day%
endlocal
上述批处理文件的输出为:

Day: 08
Day: 9
Day: 08
Day: 09
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • endlocal/?
  • 设置/?
  • setlocal/?

通过在命令提示符窗口中运行
SET/?
可以读取命令的帮助SET。它解释了带前导0的数字被解释为八进制数字,请参见Windows命令解释器内部使用的带的函数为
0
(自动检测)

08
09
在八进制数字系统中无效,因此使用值
0
进行解释

这种情况下的一种解决方案是,首先在预处理状态期间使用字符串串联,将字符串
08
更改为
108
,并将
108
减去
99
,转换为整数,得到
08
09
以及
01
31
1

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "day=08"
echo Day: %day%
set /A day=1%day% - 99
echo Day: %day%
endlocal
上述批处理文件的输出为:

Day: 08
Day: 9
Day: 08
Day: 09
这里不需要延迟的环境变量展开,通常在算术表达式中根本不需要,这也可以通过命令SET来解释。当然,在命令块中定义或修改环境变量之前,在命令块中执行算术表达式之前,必须先执行字符串连接等异常。但是这些用例真的很少见

对于少于两位数的数字,当结果应再次以前导的
0
表示时,最好不要减去
99
,而是加上
1
,并在下一步中,在算术表达式求值后,将字符串中始终为3位数的最后两位数分配给环境变量

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "day=08"
echo Day: %day%
set /A day=1%day% + 1
set "day=%day:~-2%"
echo Day: %day%
endlocal
上述批处理文件的输出为:

Day: 08
Day: 9
Day: 08
Day: 09
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • endlocal/?
  • 设置/?
  • setlocal/?

我打赌的可能重复如果您阅读SET命令的帮助文件,您将看到为什么您无法执行您尝试执行的操作。我打赌的可能重复如果您阅读SET命令的帮助文件,您将看到为什么您无法执行您尝试执行的操作。非常感谢!这是一个很好的解决办法。幸运的是,我成功地绕过了添加0的要求,因为我发现使用另一种格式的EchoThank可以将单个数字保存到文本文件中!这是一个很好的解决办法。幸运的是,我成功地绕过了添加0的要求,因为我发现可以使用另一种echo格式将一个数字保存到文本文件中