2015-08-30 7 views
0

Я хочу удалить файлы bak после zip из любой подпапки для заданного пути, поэтому все дубликаты файлов с расширением .bak будут удалены, я запускаю сценарий ниже, но получаю ошибку.Ошибка при запуске скрипта powershell

$filePath = "d:\Test\" 

$Afiles = Get-ChildItem -Recurse -Path $filePath | Where-Object {$_.Extension -eq ".bak"} 
$Bfiles = Get-ChildItem -Recurse -Path $filePath | Where-Object {$_.Extension -eq ".7z"} 

$Alist = @() 
$Blist = @() 

foreach($A in $Afiles) { 
    $Alist += $A.baseName 
} 

foreach($B in $Bfiles) { 
    $Blist += $B.baseName 
} 

foreach($A in $Alist) { 
    if($Blist -contains $a) 
    { 
     rm ("$A.bak") 
    } 
} 

Я получаю ниже ошибки:

Remove-Item : Cannot find path 'C:\Users\******\Desktop\master_backup_2015_08_21_013722_8370267.bak' because it does not exist. 
At C:\Users\*****\Desktop\duplicatedelete1.ps1:26 char:10 
+  rm <<<< ("$A.bak") 
    + CategoryInfo   : ObjectNotFound: (C:\Users\****....722_8370267.bak:String) [Remove-Item], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand 

ответ

0

Вы получили ошибку, потому что вы не указав полный путь rm команды и PowerShell пытается удалить файл в текущем каталоге.

Попробуйте это:

$Path = 'D:\Test' 

Get-ChildItem -Path $Path -Recurse -Filter '*.7z' | ForEach-Object { 
    $BackupFile = Join-Path -Path (Split-Path $_.FullName -Parent) -ChildPath ($_.BaseName + '.bak') 
    if(Test-Path -Path $BackupFile){ 
     Remove-Item -Path $BackupFile 
    } 
} 
+0

Он по-прежнему дает ошибку, как показано ниже: Remove-Item: Не удается найти путь 'D: \ Test \ AdventureWorks2012_backup_2015_08_21_013722_9618283.bak', потому что он не существует. В строке: 26 char: 10 + rm <<<< (Join-Path $ filePath -ChildPath "$ A.bak") + CategoryInfo: ObjectNotFound: (D: \ Test \ Adventu ... 722_9618283.bak: String) [Remove-Item], ItemNotFoundException + FullyQualifiedErrorId: PathNotFound, Microsoft.PowerShell.Commands.RemoveItemCommand – Mehul

+0

путь «D: \ Test» .. теперь файлы находятся в подпапке1, вложенной папке2 в тестовой папке, но, согласно сценарию, пытается удалить файл .bak из d: \ Test \ filename path..where, он не находит его. Что не так в запросе? – Mehul

+0

запрос должен пойти, чтобы удалить файл в подпапке тестовой папки ... но почему после получения имени файла он пытается удалить его только из родительской папки? – Mehul