나는 Powershell이 아닌 대부분의 언어를 직감적으로 파악할 수 있습니다.Powershell - + = 연산자를 사용하기 위해 배열을 선언하는 방법
배열 배열을 만들려고합니다 (디스크 디렉토리와 개수가 포함되므로 나중에 많은 파일이 있는지 확인할 수 있습니다).
배열의 배열에서 Get-ChildItem에 전달할 수 있도록 디렉터리 이름의 배열 하나만 가져 오려고합니다.
$DirInfo = @('d:\Work',2),
('d:\Temp',3)
[email protected]() #declare empty array
foreach ($item in $DirInfo)
{
$DirNameArray += , $item[0] #tried with and without the comma here
Write-Host 'Loop1 ' $item[0]
}
write-host $DirNameArray.count
#Let's Verify what we got so we know how many items we have in our array
Write-Host "Verify with a loop"
foreach ($dir in $DirNameArray)
{
Write-Host 'Loop2:' $dir
}
Write-Host "Verify the other way"
Write-Host $DirNameArray
실제 결과 : LOOP2 두 번 실행하지 않았는지 이해가 안 무엇
Loop1 d:\Work
Loop1 d:\Temp
1
Verify with a loop
Loop2: d:\Workd:\Temp
Verify the other way
d:\Workd:\Temp
입니다. = + + $ DirNameArray라는 배열에 새 항목을 추가하는 대신 값을 함께 연결하는 것 같습니다.
나는 아직도 완전히 당황하고있어, 내가 만든 하나 개의 파일이 작업을 수행하고 나에게 예상되는 결과를 제공합니다
$a = "one","two"
Write-Host $a.count
$a += "three"
Write-Host $a.count
결과 :
2
3
위에서 근무 그래서 경우를하지 않은 이유 내 코드가 작동합니까?
내가 만든 두 번째 파일은이 작업을 수행하며 결과를 이해하지 못합니다.
$DirNameArray5="abc","def"
write-host $DirNameArray5.count
$DirNameArray5 += "xyz"
write-host $DirNameArray5.count
$DirNameArray5 += @("opq")
write-host $DirNameArray5.count
결과 :
1
1
1
$DirNameArray7="abc","def"
write-host $DirNameArray7.count
$DirNameArray7 += "xyz"
write-host $DirNameArray7.count
$DirNameArray7 += @("opq")
write-host $DirNameArray7.count
결과 : 심지어 다른 변수 이름은 그래서 그 변수의 사전 정의 또는 값을 처리되지 않을 만든
2
3
4
그래서 변수를 문자열로 정의한 경우 Powershell에 배열로 다시 정의하는 것이 어렵습니다.
하지만 여전히 원래 질문이 있습니다. 빈 배열을 정의하여 + = 연산자를 사용하여 루프에 추가 할 수있는 방법. PS C :
[email protected]()
나는 결국 내 변수가 실제로 무엇인지 확인하기 위해 .GetType() 메소드를 사용하는 사용자 \ nwalters> $ DirNameArray5.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
PS C:\Users\nwalters> $DirNameArray7.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
결론을 \ -이 내가하고 싶은 것입니다 - 가능한 코드로 몇 줄 더 루프 :
[string][email protected]() # declare empty array
Write-Host $x.GetType()
$x += "one"
$x += "two"
Write-Host $x.count
Write-Host $x
실제 결과
,System.String
1
onetwo
원하는 결과
object[] or string[]???
2
one two
에게 제공합니다. 루프 사이에'write-host $ DirNameArray.count' 줄을 추가해보십시오. $ DirNameArray가 배열 인 경우 Count 속성은 요소 수를 표시합니다. – andyb
PowerShell의 '플랫 팅 (flattening)'배열과 관련이 있는지 모르겠지만 (그렇다고 추측 할 수 있습니다) 그렇다면 go-to 리소스가 Keith Hill의 블로그 기사 http://rkeithhill.wordpress.com/ 인 것 같습니다. 2007/09/24/effective-powershell-item-8-output-cardinality-scalars-collections-and-empty-sets-oh-my/ – andyb
그리고 count는 1을 보여 주며, 배열에 추가하지만 문자열 끝에 문자열 데이터를 추가하기 만하면됩니다. 나는 블로그를 읽었다. 내가 여기에서 도와 줄 수있는 것이 없다는 것을 확신하지 못한다. – NealWalters