Lista de arquivos na pasta que correspondem ao tipo

1

No Windows Search, posso usar kind:=music OR kind:=video para obter todos os resultados em uma pasta / subpastas que são esse tipo de mídia.

Existe uma maneira de replicar isso com um comando como dir na linha de comando, ou eu terei que fazer alguma manipulação sofisticada com meu mapa de tipos Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap para obter uma lista de extensões de arquivos para pesquisar. Em seguida, faça algo como this

Por fim, estou atrás de um csv ou equivalente, com todos os arquivos correspondentes aos critérios de pesquisa

    
por Greedo 20.07.2018 / 10:07

2 respostas

2

Primeira tentativa em lote trabalhando apenas na metade do caminho como findstr capitula sobre o grande número de extensões em documentos Kinds, música, imagem e vídeo.

EDITE a segunda versão de trabalho com um arquivo temporário (feio) contendo as extensões Kinds

:: Q:\Test18\SU_1341778.cmd
:: DirKind.cmd music x:\path\folder
@Echo off

:: Possible Kind_ type strings
Set "Kinds=calendar communication contact document email link music picture"
Set "Kinds=%Kinds% playlist program recordedtv searchfolder video"

Echo=%Kinds%|Findstr /i "%~1" 2>&1>Nul ||(Echo invalid Kind:%1 &TimeOut 5&Exit /B 1)

Set "TempFile=%temp%\Kind_%~1.ext"
:: Build Kind_ string enumerating extensions
Set "Key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap"
( For /f "tokens=1,3" %%A in (
    'reg query "%Key%"^|find "%~1"'
  ) do Echo=%%A
) > "%TempFile%"

Echo Dir all files of Kind %1 in folder "%~2"
Call Set "Kind=%%Kind_%1%%"
For /f "delims=" %%A in (
  'Dir /B /A-d "%~2\*" ^| Findstr /i /E /G:"%TempFile%" '
) Do Echo %%A

Exemplo de saída

> Q:\Test18\SU_1341778.cmd link "%USERPROFILE%\Desktop"
Dir all files of Kind link in folder "C:\Users\LotPings\Desktop"
Access 2016.lnk
ClassicStartMenu.exe - Verknüpfung.lnk
Excel 2016.lnk
FreeCommander XE.lnk
Microsoft Edge.lnk
OneNote 2016.lnk
Outlook 2016.lnk
PowerPoint 2016.lnk
Publisher 2016.lnk
shutdown.exe.lnk
UltraVNC Server.lnk
UltraVNC Settings.lnk
UltraVNC Viewer.lnk
WinDirStat.lnk
Windows 10-Update-Assistent.lnk
Word 2016.lnk
    
por 20.07.2018 / 12:06
1

Sempre que estou procurando algo específico em meus diretórios, gosto desse forro

Get-ChildItem -Recurse -ErrorAction SilentlyContinue -Path C:\Users\ -Include*.ext

então um exemplo no seu caso seria

Get-ChildItem -Recurse -ErrorAction SilentlyContinue -Path C:\Users\[Uname]\Downloads -Include *.mp3,*.mov; # etc

Do texto para obter ajuda

-Path <String[]>
    Specifies a path to one or more locations. Wildcards are permitted. The default location is the current directory (.).

-Recurse [<SwitchParameter>]
    Indicates that this cmdlet gets the items in the specified locations and in all child items of the locations.

-Include <String[]>
    Specifies, as a string array, an item or items that this cmdlet includes in the operation. The value of this parameter qualifies the Path parameter. Enter a path element or pattern, such as *.txt. Wildcards are permitted.

    The Include parameter is effective only when the command includes the Recurse parameter or the path leads to the contents of a directory, such as C:\Windows\*, where the wildcard character specifies the contents of the C:\Windows directory.

Vou executar uma pesquisa em uma pasta de scripts procurando por arquivos PowerShell e Bash como exemplo:

Get-ChildItem -Recurse -ErrorAction SilentlyContinue -Path .\Desktop\scripts\ -Include *.ps1,*.sh

Resultado:

    Directory: C:\Users\[user]\Desktop\scripts\Bash


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/22/2018   8:03 PM             84 runit.sh


    Directory: C:\Users\[user]\Desktop\scripts\PS


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        4/19/2018   9:04 PM            173 pass_d.ps1
-a----         9/7/2017   4:45 PM            345 refresh.ps1
-a----        5/11/2018   9:05 PM           1589 test.ps1
-a----        4/20/2018   8:55 PM            273 wifi_list.ps1

Isso não aceita um argumento kind:=music,kind:=video , mas você pode fornecer asteriscos com extensões de arquivo como uma matriz para o argumento -Include *.mp3,*.mov e pode pesquisar vários diretórios de forma semelhante -Path /some/directory,some/directory2 . Executar esse mesmo comando de uma linha canalizado para | Export-Csv [filename].csv salvará seus resultados como um arquivo .csv.

Dica : o PowerShell tem a conclusão de tabulação disponível para que você não precise digitar cada argumento. get-ch<tab> > Get-ChildItem , Get-ChildItem -i<tab> > Get-ChildItem -Include , etc.

    
por 21.07.2018 / 20:22