Script Powershell para abrir vários arquivos localizados dentro de subdiretórios

1

Como se abre (digamos, usando notepad.exe) vários arquivos terminados em _dc.txt, cada um dos quais está localizado em vários subdiretórios de C: \ Data \ Test?

Meu script abaixo fica preso em -Recurse, com o erro "Invoke-Item: Um parâmetro não pode ser encontrado que corresponda ao nome do parâmetro Recurse."

# recursively go into dc1 subfolders and open _dc.txt files
Clear-Host
$Directory = "C:\Data\Test*"

Invoke-Item -Path $Directory -Recurse -Include *_dc.txt
    
por val 23.09.2014 / 19:18

1 resposta

0

-Recurse não é um dos "Parâmetros comuns" do PowerShell. Portanto, não está disponível em todos os cmdlets. Se você precisar da funcionalidade de -Recurse para usar com um cmdlet que não oferece suporte a ela, será necessário canalizar a saída de um cmdlet que ofereça suporte a ela.

Nesse caso, parece que você também precisará transmitir a saída por meio de um cmdlet de filtragem (como Where-Object ) primeiro. Eu tentei usar -Include com Invoke-Item , mas não consegui fazê-lo se comportar como você quer.

Exemplo:

Get-Childitem 'C:\Data\Test*' -Recurse | Where-Object {$_.Name -match "_dc.txt$"} | Invoke-Item

Expandido, com comentários:

# Recursively search folders with names beginning 'C:\Data\Test' and return the objects found.
Get-ChildItem 'C:\Data\Test*' -Recurse |

# Filter objects to only those with names ending in '_dc.txt'.
Where-Object {$_.Name -match "_dc.txt$"} |

# Perform the default action (for .txt files, this is normally "Open with Notepad") on the objects.
Invoke-Item

Golfed:

ls 'C:\Data\Test*' -R|?{$_.Name -match "_dc.txt$"}|ii
  • ls é um alias interno para Get-ChildItem
  • -Recurse pode ser cortado para apenas -R , já que é o único parâmetro com um nome que começa com "R" para Get-ChildItem .
  • ? é um alias interno para Where-Object .
  • ii é um alias interno para Invoke-Item .
por 23.09.2014 / 19:40