我试图找出为什么如果你有
会发生以下情况$arr = @("Filename1", "Filename2")
for($i =0; $i -le $arr.Length -1; $i++) {
write-host ".\"$arr[$i]
write-host ".\$arr[$i]"
write-host $arr[$i]
}
因此,仅通过一个循环就会产生:
".\ Filename1"
".\ Filename1 Filename2[0]"
"Filename1"
只是引用数组[index]将产生正确的值,但如果我与字符串连接,它会在字符串和值之间放置一个空格。当放在字符串中时我假设它正在转储整个内容,因为它正在评估$ array然后评估$ i以
结尾“。\ filename1 filename2 [索引号]”
但是如果我将单个值分配给一个单独的变量并将其与一个字符串连接起来就没有空格了?为什么:
示例:
$name = $arr[$i]
write-host ".\$name"
output =“。\ filename1”
这是正确的。
答案 0 :(得分:14)
你必须这样做:
write-host ".\$($arr[$i])"
以便将其评估为数组索引。
在字符串中访问对象的属性或散列键等的情况就是这种情况:
PS > $a = @{test="A";test2="B"}
PS > write-host "$a.test"
System.Collections.Hashtable.test
PS > write-host "$($a.test)"
A
另一种方法是使用字符串格式,当字符串中包含大量变量/对象时非常有用:
write-host (".\{0}" -f $arr[$i])
答案 1 :(得分:3)
您的代码应如下所示:
$arr = @("Filename1", "Filename2")
#for($i =0; $i -le $arr.Length-1; $i++) {
for($i =0; $i -le $arr.Length; $i++) {
write-host ".\"$arr[$i]
#write-host ".\$arr[$i]"
write-host ".\$($arr[$i])"
write-host $arr[$i]
}