2015-08-22 6 views
0

Ниже код будет запущен только в директории «c:\test», я хочу, чтобы этот код запускался во всех подкаталогах «c:\test». used -recursive, но никакой помощи.Shellscript для запуска в подкаталогах

cd c:\Test 
$Afiles = ls -r *.bak 
$Bfiles = ls -r *.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") 
    } 
} 
+0

Так вы ищете для всех 7z файлов, которые имеют .bak с именем, совпадающим regarless его полный путь в C: \ тест и удалить их ? – Matt

ответ

1

PowerShell (2,0) решает эту команду стенографии:

ls -r *.bak 

к

Get-ChildItem -Recurse -Path *.bak 

Поскольку *.bak элементов все файлы, нет ничего, чтобы рекурсия через

Что вы хотите, это -Filter *.bak, а не -Path *.bak

Используйте явные имена параметров, если вы хотите избежать такого рода сюрпризов. Вы также можете захватить BaseName собственность непосредственно с выхода Get-ChildItem:

cd c:\Test 
$Alist = Get-ChildItem -Path $PWD -Filter *.bak -Recurse | Select -ExpandProperty BaseName 
$Blist = Get-ChildItem -Path $PWD -Filter *.7z -Recurse | Select -ExpandProperty BaseName 

foreach($A in $Alist) { 
    if($Blist -contains $A) 
    { 
     Remove-Item "$A.bak" 
    } 
} 
Смежные вопросы