我想用PowerShell腳本比較2個給定文件夾的子文件夾中的文件數量,但有些內容不起作用。比較子文件夾中的文件數量
我通過用戶輸入得到了2個文件夾的路徑並將其保存到 變量$where1
和$where2
,我還保存在腳本開始進入可變$a
的位置。我更改爲給出的文件夾以獲取有關其中的子文件夾的信息到2個數組中,一個有數字的$folderArrayX
(如$folderArrayX["subfolder1"]=x
(x
是子文件夾1的子項的數量)),另一個只是子文件夾的名稱更容易比較。給出的第一個文件夾的代碼:
cd $where1;
$folderArray1 = @();
$folderArray1Keys = @();
Get-Childitem | Select-Object | ForEach-Object {
if ($_.PSIsContainer) {
$ArrayInArray = @{};
$folderArray1Keys += $_.Name.Trim();
$ArrayInArray[$_.Name.Trim()] = (Get-ChildItem ./$_).count;
$folderArray1 += $ArrayInArray;
}
}
我爲$where2
一樣的,所以我得到$folderArray2
和$folderArray2Keys
。
我們比較這些2:
$r=() #something to save the returns
Compare-Object $folderArray1Keys $folderArray2Keys -IncludeEqual | ForEach-Object {
if ($_.SideIndicator -eq "=>") {
$r += ""+$_.InputObect+" only "+$where2+" : "+$folderArray2[$_.InputObject]+" files";
} elseif ($_.SideIndicator -eq "<=") {
$r += ""+$_.InputObect+" only "+$where1+" : "+$folderArray1[$_.InputObject]+" files";
} else {
if ($folderArray1[$_.InputObject] -gt $folderArray2[$_.InputObject]) {
$dif = ($folderArray1[$_.InputObject]-$folderArray2[$_.InputObject])
$r += "on both sides"+$_.InputObject+" has "+$diff+" more files in "+$where1
} elseif ($folderArray2[$_.InputObject] -gt $folderArray1[$_.InputObject]) {
$dif = ($folderArray2[$_.InputObject]-$folderArray1[$_.InputObject])
$r += "on both sides"+$_.InputObject+" has "+$diff+" more files in "+$where2
} else {
$r += ""+$_.InputObject+" is equal on both sides";
}
}
}
#Output
$r
cd $a
一些如何驗證碼不能很好地工作。它表明子文件夾是平等的,顯然不是(只是因爲他們在那裏,完全忽略了這些數字),不要拼寫出所有的文件夾(我最不理解的是(它對雙面文件夾都這樣做)),也不要顯示任何數字。我想不通的錯誤,因爲assiocated陣列PowerShell的工作,我的意思是像這樣的代碼:
$k1="key1";
$v1=1;
$k2="key2";
$v2="value2";
[email protected]{};
$array[$k1]=$v1;
$array[$k2]=$v2;
$array[$k1]
$array[$k2]
pause
# Exert
# 1
# value2
# Press any key to continue ...
按預期工作。
它的工作,仍然是把Arraykeys放在他們自己的數組中更好的方法。此代碼:$ a = @ {}; $ a [「k1」] =「v1」; $ a [「k2」] =「v2」; $ b = @ {}; $ b [「k2」] =「v2」; $ b [「k3」] =「v3」; 比較對象$ a.Keys $ b.Keys -IncludeEqual;將產生這個輸出:InputObject {k3,k2} {k2,k1}; SideIndicator =><=,它只是表明鍵是不同的。 Duh – user3284214
@ user3284214密鑰集合必須轉換爲數組。查看更新的答案。 –
謝謝,但我的代碼現在運行良好。最後一個問題:您使用$ _。Name作爲Keys,但$ _。FullName,有區別嗎?它似乎只爲我使用$ _。Name。 – user3284214