Necesito obtener todos los archivos, incluidos los archivos presentes en las subcarpetas que pertenecen a un tipo en 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 la ruta completa.
powershell
powershell-2.0
Gagan
fuente
fuente
*.txt*
(-Filter
usa comodines CMD). Si esto no es lo que quieres, entonces úsalo-Include *.txt
.También puede usar Select-Object de la siguiente manera:
fuente
Select-Object
devuelvePSCustomObject
, no una cadena. Es posible que no funcione si utiliza el resultado como parámetro para otro programaPSCustomObject
, use en-ExpandProperty FullName
lugar de simplementeFullName
. Según tengo entendido, el-ExpandProperty
parámetro hace que el cmdlet devuelva los resultados como el tipo de propiedad especificada (¿nativo?) En lugar de como un objeto personalizado.Get-ChildItem -Path 'C:\Program Files\TheProgram' -Recurse | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-03-01')} | Select-Object FullName
Aquí hay uno más corto:
fuente
(gci -r c:\).fullname
(ls -r c:\).fullname
(ls -r c:).fullname
Si las rutas relativas son lo que desea, puede usar la
-Name
bandera.Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name
fuente
Eso es lo que usé. Siento que es más comprensible ya que no contiene ninguna sintaxis de bucle.
fuente
Lo realmente molesto en PS 5, donde $ _ no será el camino completo dentro de foreach. Estas son las versiones en cadena de los objetos FileInfo y DirectoryInfo. Por alguna razón, un comodín en la ruta lo arregla, o use Powershell 6 o 7. También puede canalizar a get-item en el medio.
Esto parece haber sido un problema con .Net que se resolvió en .Net Core (Powershell 7): el comportamiento de Stringification de las instancias de FileInfo / Directory ha cambiado desde v6.0.2 # 7132
fuente
Esto funcionó para mí y produce una lista de nombres:
Lo encontré usando
get-member -membertype properties
un comando increíblemente útil. La mayoría de las opciones que le ofrece se agregan con un.<thing>
, comofullname
está aquí. Puedes pegar el mismo comando;al final de cualquier comando para obtener más información sobre las cosas que puede hacer con ellos y cómo acceder a ellos:
fuente
Prueba esto:
fuente
¿Por qué nadie ha usado el bucle foreach todavía? Un profesional aquí es que puede nombrar fácilmente su variable:
fuente
$
frente atextfile
:$textfile = $fileList[$i].FullName
. Suponiendo que$i
tiene un valor numérico, es decir.fuente
[sintaxis alternativa]
Para algunas personas, los operadores de tuberías direccionales no son de su agrado, sino que prefieren encadenarse. Vea algunas opiniones interesantes sobre este tema compartidas en el rastreador de problemas de roslyn: dotnet / roslyn # 5445 .
Según el caso y el contexto, uno de estos enfoques puede considerarse implícito (o indirecto). Por ejemplo, en este caso, usar pipe contra enumerable requiere un token especial
$_
(también conocido comoPowerShell's "THIS" token
) que puede parecer desagradable para algunos.Para tales muchachos, aquí hay una manera más concisa y directa de hacerlo con el encadenamiento de puntos :
(<diatriba> Nota que los argumentos de comando analizador de PowerShell acepta los nombres de los parámetros parciales Así, además de.
-recursive
;-recursiv
,-recursi
,-recurs
,-recur
,-recu
,-rec
y-re
son aceptados, pero lamentablemente no-r
.. que es la única opción correcta que tiene sentido con un solo-
carácter (si ir por convenciones POSIXy UNIXy)! </rant>)fuente
-r
forma corta de-Recurse
funciona bien para mí.-File
interruptor-fi
en la muestra:-fil
y-file
funciona, pero no-f
. Siguiendo el estilo POSIX, debe ser--file
(varias letras) y-f
(una letra, a menos que -f esté reservado para otra cosa, digamosforce
switch, entonces puede ser algo diferente-l
o ninguna opción de letra única).Estoy usando el siguiente script para extraer toda la ruta de la carpeta:
La ruta completa de la carpeta no viene. Después de 113 caracteres, viene:
fuente
Utilicé este comando de línea para buscar archivos ".xlm" en "C: \ Temp" y el resultado imprime la ruta del nombre completo en el archivo "result.txt":
En mis pruebas, esta sintaxis funciona muy bien para mí.
fuente