Preciso obter todos os arquivos, incluindo os presentes nas subpastas que pertencem a um tipo específico.
Estou fazendo algo parecido com isto, usando Get-ChildItem :
Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
No entanto, ele está apenas retornando os nomes dos arquivos e não o caminho inteiro.
powershell
powershell-2.0
Gagan
fonte
fonte
*.txt*
(-Filter
usa curingas CMD). Se não é isso que você deseja, use-Include *.txt
.Você também pode usar Select-Object da seguinte maneira:
fonte
Select-Object
retornaPSCustomObject
, não uma sequência. Talvez não funcione se você usar o resultado como parâmetro para outro programaPSCustomObject
, use em-ExpandProperty FullName
vez de simplesmenteFullName
. Pelo que entendi, o-ExpandProperty
parâmetro faz com que o cmdlet retorne os resultados como o tipo de propriedade especificado (nativo?), Em vez de como um objeto personalizado.Get-ChildItem -Path 'C:\Program Files\TheProgram' -Recurse | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-03-01')} | Select-Object FullName
Aqui está um mais curto:
fonte
(gci -r c:\).fullname
(ls -r c:\).fullname
(ls -r c:).fullname
Se os caminhos relativos forem o que você deseja, basta usar o
-Name
sinalizador.Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name
fonte
Isso é o que eu usei. Eu sinto que é mais compreensível, pois não contém nenhuma sintaxe de loop.
fonte
Coisa realmente irritante no PS 5, onde $ _ não será o caminho completo dentro do foreach. Essas são as versões de string dos objetos FileInfo e DirectoryInfo. Por algum motivo, um curinga no caminho o corrige ou use o PowerShell 6 ou 7. Você também pode canalizar para obter o item no meio.
Parece ter sido um problema com o .Net que foi resolvido no .Net Core (Powershell 7): O comportamento de stringification das instâncias FileInfo / Directory mudou desde a v6.0.2 # 7132
fonte
Isso funcionou para mim e produz uma lista de nomes:
Eu achei isso usando
get-member -membertype properties
, um comando incrivelmente útil. a maioria das opções que você fornece é anexada com um.<thing>
, comofullname
está aqui. Você pode manter o mesmo comando;no final de qualquer comando, para obter mais informações sobre o que você pode fazer com eles e como acessá-los:
fonte
Tente o seguinte:
fonte
Por que ninguém usou o loop foreach ainda? Um profissional aqui é que você pode facilmente nomear sua variável:
fonte
$
em frentetextfile
:$textfile = $fileList[$i].FullName
. Supondo que$i
tenha um valor numérico, ou seja.fonte
[sintaxe alternativa]
Para algumas pessoas, os operadores de tubos direcionais não são do seu gosto, mas preferem encadear. Veja algumas opiniões interessantes sobre esse tópico compartilhadas no roslyn issue tracker: dotnet / roslyn # 5445 .
Com base no caso e no contexto, uma dessas abordagens pode ser considerada implícita (ou indireta). Por exemplo, nesse caso, o uso de pipe contra enumerável requer um token especial
$_
(akaPowerShell's "THIS" token
) pode parecer desagradável para alguns.Para esses tipos, aqui está uma maneira mais concisa e direta de fazer isso com encadeamento de pontos :
(<rant> Note que parser argumentos do comando do PowerShell aceita os nomes dos parâmetros parciais Assim, além de.
-recursive
;-recursiv
,-recursi
,-recurs
,-recur
,-recu
,-rec
e-re
são aceitos, mas infelizmente não-r
.. que é a única escolha correta que faz sentido com um único-
caractere (se siga as convenções do POSIXy UNIXy)! </rant>)fonte
-r
forma abreviada de-Recurse
funciona bem para mim.-File
switch-fi
da amostra:-fil
e-file
funciona, mas não-f
. Seguindo o estilo POSIX, deve ser--file
(várias letras) e-f
(uma letra), a menos que -f seja reservado para outra coisa, digamosforce
switch, então pode ser outra coisa parecida-l
ou nenhuma opção de letra única).Estou usando o script abaixo para extrair todo o caminho da pasta:
O caminho completo da pasta não está chegando. Após 113 caracteres, está chegando:
fonte
Eu usei este comando de linha para pesquisar arquivos ".xlm" em "C: \ Temp" e o resultado imprime o caminho do nome completo no arquivo "result.txt":
Nos meus testes, essa sintaxe funciona muito bem para mim.
fonte