Es werden nur ADS-Dateien angezeigt

Es werden nur ADS-Dateien angezeigt

cmd.exeDerzeit ist der Code, den ich zum Anzeigen von Alternate Data Stream (ADS)-Dateien verwende dir /R, .

Dies führt jedoch dazu, dass zusätzlich zu den ADS-Dateien auch alle meine anderen Dateien aufgelistet werden.

Die Frage ist - welchen Befehl soll ich verwenden, umnurADS-Dateien anzeigen.


Der Befehl dir C:\ /r /s | findstr /r "\$DATA"ist der beste, den ich finden konnte – obwohl ich von seiner Genauigkeit nicht allzu überzeugt bin. Gibt es noch andere?

Antwort1

AltStreamDumpDas Dienstprogramm (von Nirsoft) kann dies ebenfalls.

EDIT: Es gibt auch GUI-AnwendungAlternativeStreamView(Nirsoft auch), die Befehlszeilenunterstützung haben und beispielsweise den Export der Liste in eine Datei ermöglichen

Antwort2

Sehr cool – ich hatte noch nie zuvor von ADS gehört und musste nachschlagen, was das ist.

Ich kann nicht für die Zuverlässigkeit Ihrer Methode bürgen, sehe aber drei Möglichkeiten, sie möglicherweise zu verbessern.

1) Eine normale Datei könnte "$DATA" heißen. Sie können die Genauigkeit Ihres Filters verbessern, indem Sie Folgendes verwenden:

findstr /el :$DATA


2) Sie verlieren die Pfadinformationen, wenn Sie DIR /R /Sdie Option verwenden und nur die :$DATAZeilen behalten. Hier ist ein fieser Einzeiler, der die Dateigröße und den vollständigen Pfad für alle ADS auflistet. Ich leite stderr auf nul um, um Fehlermeldungen aus unzugänglichen Ordnern auszublenden:

for /r %F in (.) do @(pushd "%F"&&(for /f "tokens=1*" %A in ('dir /r^|findstr /el :$DATA') do @echo %A %~fB)&popd)2>nul


3) Ein ADS kann sowohl an einen Ordner als auch an eine Datei angehängt werden. Angenommen, die folgende Ordnerstruktur existiert: C:\root\child\grandchild\. Nehmen wir außerdem an, dass C:\root\childes ein ADS mit dem Namen gibt child:ads.txt. Der DIR /R /SBefehl listet das ADS auf den folgenden drei Ebenen auf:

  • C:\rootwird auflistenchild:ads.txt:$DATA

  • C:\root\childwird auflisten.:ads.txt:$DATA

  • C:\root\grandchildwird auflisten..:ads.txt:$DATA

Nur das erste Listing ist erwünscht. Innerhalb der FOR /F-Schleife kann die Größe von %Bdurch die Verwendung von ermittelt werden %~zB, aber das funktioniert nur für das erste Listing; für die anderen beiden wird es zu einem leeren String erweitert. Dies bietet eine bequeme und effiziente Möglichkeit, die unerwünschten Listings zu eliminieren.

for /r %F in (.) do @(pushd "%F"&&(for /f "tokens=1*" %A in ('dir /r^|findstr /el :$DATA') do @if .%~zB neq . echo %A %~fB)&popd)2>nul


Die endgültige Lösung sieht als mehrzeiliges Batch-Skript viel besser aus

@echo off
for /r %%F in (.) do (
  pushd "%%F" &&(
    for /f "tokens=1*" %%A in (
      'dir /r^|findstr /el :$DATA'
    ) do if "%%~zB" neq "" echo %%~zB %%~fB
    popd
  )
)2>nul


Entfernen Sie einfach %%A(oder %A) aus dem ECHO-Befehl, wenn Sie nur die ADS-Dateipfade ohne die Dateigrößen möchten.

verwandte Informationen