Obtenga la ruta completa de los archivos en PowerShell
powershell-v2.0 (10)
Necesito obtener todos los archivos incluidos los archivos presentes en las subcarpetas que pertenecen a un tipo particular.
Estoy haciendo algo como esto, usando Get-ChildItem :
Get-ChildItem "C:/windows/System32" -Recurse | where {$_.extension -eq ".txt"}
Sin embargo, solo me devuelve los nombres de los archivos y no toda la ruta.
Añadir | select FullName
| select FullName
al final de su línea arriba. Si necesitas hacer algo con eso luego, podrías tener que canalizarlo en un bucle foreach, así:
get-childitem "C:/windows/System32" -recurse | where {$_.extension -eq ".txt"} | % {
Write-Host $_.FullName
}
Aquí hay uno más corto:
(Get-ChildItem C:/MYDIRECTORY -Recurse).fullname > filename.txt
Esto debería funcionar mucho más rápido que usar filtros tardíos:
Get-ChildItem C:/WINDOWS/System32 -Filter *.txt -Recurse | % { $_.FullName }
Esto funcionó para mí y produce una lista de nombres:
$Thisfile=(get-childitem -path 10* -include ''*.JPG'' -recurse).fullname
Lo encontré usando las get-member -membertype properties
, un comando increíblemente útil. la mayoría de las opciones que le da se anexan con .<thing>
, como fullname
está aquí. Puedes pegar el mismo comando;
| get-member -membertype properties
al final de cualquier comando para obtener más información sobre las cosas que puede hacer con ellas y cómo acceder a ellas:
get-childitem -path 10* -include ''*.JPG'' -recurse | get-member -membertype properties
Prueba esto:
Get-ChildItem C:/windows/System32 -Include *.txt -Recurse | select -ExpandProperty FullName
Si las rutas relativas son lo que quieres, puedes usar el indicador -Name
.
Get-ChildItem "C:/windows/System32" -Recurse -Filter *.txt -Name
También puede usar Select-Object como ese:
Get-ChildItem "C:/WINDOWS/System32" *.txt -Recurse | Select-Object FullName
[sintaxis alternativa]
Para algunas personas, los operadores de tuberías direccionales no son su gusto, pero prefieren el encadenamiento. Vea algunas opiniones interesantes sobre este tema compartidas en el rastreador de problemas de roslyn: dotnet/roslyn#5445 .
En función del caso y el contexto, uno de estos enfoques puede considerarse implícito (o indirecto). Por ejemplo, en este caso, usar pipe contra enumerable requiere que el token especial $_
(también conocido como PowerShell''s "THIS" token
) pueda parecer desagradable para algunos.
Para esos tipos, aquí hay una forma más concisa y directa de hacerlo con dot chaining :
(gci . -re -fi *.txt).FullName
(<rant> Tenga en cuenta que el argumento de comandos del comando de PowerShell acepta los nombres parciales de los parámetros. Por lo tanto, además de -recursive
; -recursiv
, -recursi
, -recurs
, -recur
, -recu
, -rec
y -re
son aceptados, pero desafortunadamente no -r
.. que es la única opción correcta que tiene sentido con un solo carácter (si vamos por POSIXy convenciones UNIXy)! </ rant>)
Get-ChildItem -Recurse *.txt | Format-Table FullName
Eso es lo que usé Creo que es más comprensible ya que no contiene ninguna sintaxis de bucle.
gci "C:/WINDOWS/System32" -r -include .txt | select fullname