我是Powershell的初學者,也請原諒我的英語不是最好的。
我有一個目錄,里面有幾個像這樣的子目錄
目錄
我的目標是定位在腳本運行時更新的目錄。所以我做了這個腳本
$path = "C:\Users\s611284\Desktop\archive"
#Check that the directories have the correct name and calculate their size
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach {
$Size = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
$FolderName = $_.BaseName -match '1B(\d{6})_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{6})' -or $_.BaseName -match '1B(\d{6})_SML 10_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{5})'
$Folder = $_.BaseName
if ($FolderName -eq "true") {
write-host(" name $Folder is correct, $Size Kb")
}
else {
write-host( "name $Folder is incorrect")
}
}
#Break
Start-Sleep -Seconds 30
write-host( "end of break")
#directory size calculation after the break
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach {
$Size1 = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
$FolderName1 = $_.BaseName -match '1B(\d{6})_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{6})' -or $_.BaseName -match '1B(\d{6})_SML 10_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{5})'
$Folder1 = $_.BaseName
if ($FolderName1 -eq "true") {
write-host("name $Folder1 is correct, $Size1 Kb")
}
else {
write-host( "name $Folder1 is incorrect")
}
}
所有這一切都很好
所以現在想比較一下break前后子目錄的大小,知道哪些已經更新了
我試過了
if ( $FolderSize -eq $FolderSize1 )
{
Write-Output $True
}
Else
{
Write-Output $False
}
在我的第二個街區結束時,但它不起作用..
我也嘗試過 Compare-object 但我認為這個命令對我的情況沒有幫助
我希望你們能理解我的帖子并幫助我謝謝!
uj5u.com熱心網友回復:
如果我理解正確,您正在尋找過濾那些大小在 30 秒后發生變化的檔案夾,如果是這種情況,您可以使用一個函式,這樣您就不需要重復您的代碼。您可以讓您的函式回傳一個哈希表,其中鍵是檔案夾的絕對路徑,值是它們的計算大小,一旦您擁有兩個結果(30 秒之前和 30 秒后),您可以對兩個哈希表進行比較,輸出具有檔案夾絕對路徑、之前大小和之后大小的新物件,僅適用于其計算大小已更改的檔案夾。
function GetFolderSize {
[cmdletbinding()]
param($path)
$map = @{}
Get-ChildItem $path -Directory -Force | ForEach-Object {
$Size = (Get-ChildItem $_.Fullname -Recurse | Measure-Object -Property Length -Sum).Sum / 1Kb
$FolderName = $_.BaseName -match '1B(\d{6})_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{6})' -or $_.BaseName -match '1B(\d{6})_SML 10_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{5})'
if ($FolderName) {
$map[$_.FullName] = $size
}
}
if($map) { $map }
}
$path = "C:\Users\s611284\Desktop\archive"
$before = GetFolderSize $path -ErrorAction SilentlyContinue
Start-Sleep -Seconds 30
$after = GetFolderSize $path -ErrorAction SilentlyContinue
foreach($key in $after.PSBase.Keys) {
if($before[$key] -ne $after[$key]) {
# this is a folder with a different size than before
[PSCustomObject]@{
FullName = $key
SizeBefore = $before[$key]
SizeAfter = $after[$key]
}
}
}
uj5u.com熱心網友回復:
不要從圣地亞哥的有用答案中拿走,而是要提供替代解決方案,這是我的看法:
$path = "C:\Users\s611284\Desktop\archive"
$count = 0
$hashMap = @{}
While ($count -lt 2) {
Get-ChildItem -Path $path -Directory |
ForEach-Object -Begin {
$count
$toMatch = "1B(\d{6})_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{6})|1B(\d{6})_SML 10_LEAP 1A version aout2021_(\d{4})-(\d{2})-(\d{2})T(\d{2})h(\d{2})m(\d{2})s_S(\d{5})"
} -Process {
$folderMatch = $_.BaseName -match $toMatch
if ($folderMatch) {
$size = (Get-ChildItem -Path $_.FullName -Recurse -EA 0 | Measure-Object -Property "Length" -Sum).Sum / 1kb
if (-not$hashMap.ContainsKey($_.BaseName)) {
$hashMap.Add($_.BaseName,$size)
}
if ($count -ge 2) {
if ($hashMap[$_.BaseName] -ne $size) {
$_.BaseName " " "is a different size"
}
}
}
} -End {
if ($count -ne 2) {
Start-Sleep -Seconds 30
}
}
}
就個人而言,我討厭重復使用代碼,并且覺得如果你發現自己重復代碼(復制/粘貼),總能做些什么。
我對你的問題是:
- 這些檔案夾名稱不是很獨特嗎?
- 你不能用它來代替通配符運算式嗎?
- IE:
$_.BaseName -like '*1A version aout2021*' - 一切以“清潔”代碼的名義。哈哈
- IE:
uj5u.com熱心網友回復:
我想我理解你所有的代碼。但我不確定如何處理函式和哈希表。
現在,我只需要將 30 秒前后大小相同的檔案夾移動到另一個目錄。
我試過了
Copy-Item $path -Destination $targetFolderPath -Recurse
這是我認為很好的解決方案,但它會復制我所有的檔案夾,包括那些沒有正確命名的檔案夾和那些大小已更改的檔案夾。
如何包含條件?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444976.html
