2014-09-23 138 views
2

我有一個名爲Videos的目錄。在這個目錄裏面,有各種相機的一些子目錄。我有一個腳本可以檢查各個相機,並刪除比特定日期更早的記錄。Powershell獲取完整路徑信息

我在獲取相機的完整目錄信息時遇到了一些問題。我現在用的是以下獲得它:

#Get all of the paths for each camera 
$paths = Get-ChildItem -Path "C:\Videos\" | Select-Object FullName 

然後,我通過在$路徑中的每個路徑循環,並刪除任何我需要:

foreach ($pa in $paths) { 
    # Delete files older than the $limit. 
    $file = Get-ChildItem -Path $pa -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit } 
    $file | Remove-Item -Recurse -Force 
    $file | Select -Expand FullName | Out-File $logFile -append 
} 

當我運行該腳本,我收到錯誤如:

@{FullName=C:\Videos\PC1-CAM1} 
Get-ChildItem : Cannot find drive. A drive with the name '@{FullName=C' does not exist. 
At C:\scripts\BodyCamDelete.ps1:34 char:13 
+  $file = Get-ChildItem -Path $pa -Recurse -Force | Where-Object { $_.PSIsCont ... 
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : ObjectNotFound: (@{FullName=C:String) [Get-ChildItem], DriveNotFoundException 
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand 

有沒有一種方法去除@ {FullName =關閉路徑?我認爲這可能是問題所在。

回答

4

在你的情況下,$pa是一個具有FullName屬性的對象。你將訪問的方式就是這樣。

$file = Get-ChildItem -Path $pa.FullName -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit } 

但是它只是簡單的方法是隻更改此行並留下

$paths = Get-ChildItem -Path "C:\Videos\" | Select-Object -ExpandProperty FullName 

-ExpandProperty將剛剛返回的而不是Select-Object被返回對象的字符串。

1

你快到了。你想要的是Select-Object的-ExpandProperty參數。這將返回該屬性的值,而不是具有一個屬性的FileInfo對象,該屬性爲FullName。這應該解決它爲您:

$paths = Get-ChildItem -Path "C:\Videos\" | Select-Object -ExpandProperty FullName 

編輯:看起來像馬特通過一分鐘打我給它。