Listet Dateien in Ordnern auf, die der Art entsprechen

347
Greedo

In der Windows-Suche kann kind:=music OR kind:=videoich alle Ergebnisse in einem Ordner / Unterordner abrufen, bei dem es sich um diesen Medientyp handelt.

Gibt es eine Möglichkeit, dies mit einem Befehl wie dirin der Befehlszeile zu replizieren, oder muss ich mit meiner exportierten Art-Map Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap ein paar ausgefallene Manipulationen durchführen, um eine Liste von Dateierweiterungen zu erhalten, nach denen gesucht werden soll. Dann tun Sie etwas wie dies

Letztendlich bin ich nach einer csv oder gleichwertig mit allen Dateien, die den Suchkriterien entsprechen

1

2 Antworten auf die Frage

2
LotPings

Erster Batchversuch funktioniert nur zur Hälfte, da findstr die reinen Erweiterungen in Kinds-Dokumenten, Musik, Bildern und Videos kapituliert.

BEARBEITEN Sie die zweite Arbeitsversion mit einer (hässlichen) temporären Datei, die die Kinds-Erweiterungen enthält

:: Q:\Test\2018\07\20\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 

Beispielausgabe

> Q:\Test\2018\07\20\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 
1
saniboy

Immer wenn ich in meinen Verzeichnissen nach etwas Bestimmtem suche, mag ich diesen einen Liner

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

so wäre ein Beispiel in Ihrem Fall

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

Aus dem Get-Help-Text

-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. 

Ich führe eine Suche in einem Skriptordner durch und suche nach PowerShell- und Bash-Dateien als Beispiel:

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

Ergebnis:

 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 

Dies erfordert kein kind:=music,kind:=videoArgument, aber Sie können Sternchen mit Dateierweiterungen als Array für das -Include *.mp3,*.movArgument angeben und mehrere Verzeichnisse auf ähnliche Weise durchsuchen -Path /some/directory,some/directory2. Wenn Sie den gleichen einzeiligen Befehl ausführen, an den Sie weitergeleitet | Export-Csv [filename].csvwerden, werden Ihre Ergebnisse als CSV-Datei gespeichert.

Tipp : In PowerShell ist das Ausfüllen von Registerkarten verfügbar, sodass Sie nicht jedes Argument eingeben müssen. get-ch<tab>> Get-ChildItem, Get-ChildItem -i<tab>> Get-ChildItem -Includeusw.