Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
Powershell 为什么整数会两次增加到01?_Powershell - Fatal编程技术网

Powershell 为什么整数会两次增加到01?

Powershell 为什么整数会两次增加到01?,powershell,Powershell,我需要寻找以01 02 03等结尾的变量,直到该变量不存在,然后继续脚本。在这个循环中,在继续02 03 04 05等之前重复迭代01。为什么重复01 我的变量以两位数结尾,因此在查找变量之前,我将整数转换为字符串。我已经设法解决了这个问题,在进入循环之前再次增加$I,这很好,但我有点困惑 迭代01两次的初始脚本 $i=1 $CopyFiles_Content_No = ($i).ToString('00') do { $CopyFiles_Contents += (Get-Item e

我需要寻找以01 02 03等结尾的变量,直到该变量不存在,然后继续脚本。在这个循环中,在继续02 03 04 05等之前重复迭代01。为什么重复01

我的变量以两位数结尾,因此在查找变量之前,我将整数转换为字符串。我已经设法解决了这个问题,在进入循环之前再次增加$I,这很好,但我有点困惑

迭代01两次的初始脚本

$i=1
$CopyFiles_Content_No = ($i).ToString('00')
do {   
 $CopyFiles_Contents += (Get-Item env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No)).Value
 $CopyFiles_Content_No = ($i++).ToString('00')
} while (Test-Path env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No) -ErrorAction Ignore)
要轻松复制,只需在Powershell中键入以下内容

$i=1     #Set Int
$CopyFiles_Content_No = ($i).ToString('00')     #Convert to double digit string
$CopyFiles_Content_No     #See output which is 01
$CopyFiles_Content_No = ($i++).ToString('00')     #Increment $i and assign to variable
$CopyFiles_Content_No     #See output which is still 01
$CopyFiles_Content_No = ($i++).ToString('00')     #Increment $i and assign to variable
$CopyFiles_Content_No     #See output which is 02
$CopyFiles_Content_No = ($i++).ToString('00')    #Increment $i and assign to variable
$CopyFiles_Content_No     #See output which is 03
解决方法是在进入循环之前增加$1

$i=1
$CopyFiles_Content_No = ($i++).ToString('00')
do {   
 $CopyFiles_Contents += (Get-Item env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No)).Value
 $CopyFiles_Content_No = ($i++).ToString('00')
} while (Test-Path env:$($CopyFiles_Step)_Contents$($CopyFiles_Content_No) -ErrorAction Ignore)

这是一个后加运算符。它返回旧值。您可能希望使用
+$i
(预增量);($i++).ToString()。比较:
$i=0;(++$i).ToString()
。这对于C程序员来说是显而易见的,而对于其他任何人来说都是不可理解的。为清楚起见,我建议您实际上不要使用这两个表达式——只使用
$I
,并在自己的行中编写
$I++
++$I
。线路上没有税。解决方法是正确的。@Caramiriel,就是这样。谢谢我记不起在Powershell中使用过preincrement。我猜当增量在它自己的行上时,
$I++
++$I
是可交换的。@Bevan:如果限制为2000个字符,那么所有长变量名是怎么回事?为什么
Get Item
而不是
gi
?您的代码仍然可读性太强-P更严重的是,带有副作用的表达式使代码更难阅读和维护--很容易忽略变量正在修改的事实,移动(部分)表达式以简化计算可能会破坏代码,当然还有一个问题,就是什么时候会发生副作用,这正是你首先要问这个问题的原因。节省了大量字符。这是一个后加运算符。它返回旧值。您可能希望使用
+$i
(预增量);($i++).ToString()。比较:
$i=0;(++$i).ToString()
。这对于C程序员来说是显而易见的,而对于其他任何人来说都是不可理解的。为清楚起见,我建议您实际上不要使用这两个表达式——只使用
$I
,并在自己的行中编写
$I++
++$I
。线路上没有税。解决方法是正确的。@Caramiriel,就是这样。谢谢我记不起在Powershell中使用过preincrement。我猜当增量在它自己的行上时,
$I++
++$I
是可交换的。@Bevan:如果限制为2000个字符,那么所有长变量名是怎么回事?为什么
Get Item
而不是
gi
?您的代码仍然可读性太强-P更严重的是,带有副作用的表达式使代码更难阅读和维护--很容易忽略变量正在修改的事实,移动(部分)表达式以简化计算可能会破坏代码,当然还有一个问题,就是什么时候会发生副作用,这正是你首先要问这个问题的原因。节省大量的字符。