我有一個 CSV 檔案,其中列出了我希望洗掉的 59 個檔案夾路徑。這是我正在使用的代碼 -
$Folders = Import-Csv -Path "path to csv file"
foreach ($folder in $Folders){
if (Test-Path $folder) {
Write-Host "Folder Exists"
Remove-Item $folder -Recurse -Force
}
else
{
Write-Host "Folder Doesn't Exists"
}
}
CSV 檔案如下所示:
folders
E:\path1
E:\path2
E:\path3
但是該腳本不起作用并回傳“檔案夾不存在”,盡管它們確實存在。我錯過了什么?
uj5u.com熱心網友回復:
$Folders包含原始檔案中的行。所以每個$folder都是原始檔案中的一行,而不是列值,即檔案名。
您可以使用標題名稱訪問行中的列,在您的情況下為“檔案夾”:
$Folders = Import-Csv -Path "path to csv file"
foreach ($folder in $Folders) {
if (Test-Path $folder.folders) {
Write-Host "Folder Exists"
Remove-Item $folder.folders -Recurse -Force
}
else
{
Write-Host "Folder Doesn't Exists"
}
}
簡而言之:$folder.folders用于訪問實際值。
你可以看到這樣的區別:
PS> Import-CSV .\foo.csv | % { Write-host $_ }
@{folders=E:\path1}
@{folders=E:\path2}
@{folders=E:\path3}
PS> Import-CSV .\foo.csv | % { Write-host $_.folders }
E:\path1
E:\path2
E:\path3
uj5u.com熱心網友回復:
補充Christian.K 的有用答案,您可以使用以下替代方法:
使用Select-Objectwith 引數-ExpandProperty(別名)直接在源-Expand中提取列:Folders
$Folders = Import-Csv -Path "path to csv file" | Select-Object -Expand Folders
使用成員列舉Folders從屬性創建字串陣列:
foreach ($folder in $Folders.Folders) {
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/439106.html
