Estoy buscando un archivo en todas las carpetas.
Copyforbuild.bat
está disponible en muchos lugares, y me gustaría buscar de forma recursiva.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
¿Cómo puedo hacerlo en PowerShell?
powershell
powershell-2.0
Samselvaprabu
fuente
fuente
cd V:\MyFolder
seguido dels -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
) al final del nombre del archivo. ****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2:$Folder = "C:\Program Files"
LINE3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
Lo uso para buscar archivos y luego hacer que PowerShell muestre la ruta completa de los resultados:
Siempre puede usar el comodín
*
enFolderName
y / oFileName.fileExtension
. Por ejemplo:El ejemplo anterior buscará cualquier carpeta en la
C:\
unidad que comience con la palabraFolder
. Entonces, si tiene una carpeta llamadaFolderFoo
yFolderBar
PowerShell mostrará los resultados de ambas carpetas.Lo mismo ocurre con el nombre y la extensión del archivo. Si desea buscar un archivo con una determinada extensión, pero no conoce el nombre del archivo, puede usar:
O viceversa:
fuente
Cuando busque carpetas en las que pueda obtener un error basado en la seguridad (por ejemplo
C:\Users
), use el siguiente comando:fuente
También funcionará
fuente
Aquí está el método que finalmente se me ocurrió después de luchar:
Para hacer que la salida sea más limpia (solo ruta), use:
Para obtener solo el primer resultado, use:
Ahora para las cosas importantes:
Para buscar solo archivos / directorios, no use
-File
o-Directory
(vea a continuación por qué). En su lugar, use esto para archivos:y elimine los
-eq $false
directorios for. No , no dejar un comodín como se arrastrabin/*
.¿Por qué no usar los interruptores integrados? Son terribles y eliminan características al azar. Por ejemplo, para usar
-Include
con un archivo, debe finalizar la ruta con un comodín. Sin embargo, esto desactiva el-Recurse
interruptor sin decirte:Pensaría que eso le daría todos
*.lib
los correos electrónicos en todos los subdirectorios, pero solo buscará el nivel superior debin
.Para buscar directorios, puede usar
-Directory
, pero luego debe eliminar el comodín final. Por alguna razón, esto no se desactivará-Recurse
. Es por estas razones que recomiendo no usar las banderas incorporadas.Puede acortar este comando considerablemente:
se convierte
Get-ChildItem
tiene un aliasgci
-Path
está predeterminado en la posición 0, por lo que puede hacer la primera ruta de argumento-Recurse
tiene un alias-s
-Include
no tiene taquigrafíafuente
Prueba esto:
fuente
| Where-Object { !$_PSIsContainer }
para excluir carpetasFiltrar con comodines:
Filtrar usando una expresión regular:
fuente
'\ACopyForBuild\.(bat|cmd)\Z'
?Para agregar a @ user3303020 responder y generar los resultados de búsqueda en un archivo, puede ejecutar
Puede ser más fácil buscar el archivo correcto de esa manera.
fuente