我創建了一個腳本來在 Powershell 中復制檔案和目錄/子目錄,效果很好。
現在我想嘗試用進度條來實作它。
我的目錄結構是這樣制作的
test / dirfoo / file1, file2, subdir1, subdir2, ..
/ dirbar / file1, file2, subdir1, subdir2, ..
/ @dirfoo / file1, file2, subdir1, subdir2, ..
/ @dirbar / file1, file2, subdir1, subdir2, ..
/ file1
/ file2
/ ..
腳本
Function Copy-WithProgress
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Source,
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Destination
)
$Source=$Source.tolower()
$Filelist=Get-Childitem "$Source" –Recurse
$Total=$Filelist.count
$Position=0
foreach ($File in $Filelist)
{
$Filename=$File.Fullname.tolower().replace($Source,'')
$DestinationFile=($Destination $Filename)
Write-Progress -Activity "Copying data from '$source' to '$Destination'" -Status "Copying
File $Filename" -PercentComplete (($Position/$total)*100)
Copy-Item $File.FullName -Destination $DestinationFile
$Position
}
}
$syncSource=c:\test
$syncDest=d:\test
Copy-WithProgress -Source $syncSource -Destination $syncDest
現在我想嘗試僅復制名稱開頭帶有字符 @ 的子目錄及其檔案
為了過濾我通常以這種方式制作的名稱,但我無法在 copy-withprogress 函式中實作它
Get-ChildItem -Path $modSource |
Where-Object { $_.Name -match '@' } |
Copy-Item -Destination $modDest -Recurse -Force
我該怎么辦?
謝謝
uj5u.com熱心網友回復:
將最終呼叫包裝起來Copy-Item,ForEach-Object以便您可以Write-Progress在復制之前立即呼叫:
Get-ChildItem -Path $modSource |
Where-Object { $_.Name -match '@' } |
ForEach-Object {
Write-Progress -Status "Progress status message goes here" ...
$_ | Copy-Item -Destination $modDest -Recurse -Force
}
如果您只想將可選的基??于名稱的過濾添加到現有函式,請執行以下操作:
添加一個-Filter引數:
param(
...,
[string]$Filter = '*'
)
然后更改決議檔案串列的陳述句以使用過濾器:
$Filelist = Get-Childitem "$Source" –Recurse |Where-Object { $_.Name -like $Filter }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/472134.html
標籤:电源外壳
