Bat-Datei: Befehl ändern Sie nur die Ordner-Attribute, die nicht rekursiv
Es ist ein virus in unserem Netzwerk, das setzt alle root-Verzeichnisse Attribute hidden & system-auf-usb-flash-Laufwerke und erstellt lnk-Dateien, die zu laufen cmd.exe, virus selbst und dann Verzeichnisse öffnen, so dass Heilung solcher Laufwerke verwende ich die Befehle:
attrib -s -h -r /d /s
del /q /s *.lnk
rd /q /s recycler
Aber es gibt ein problem: der Befehl "attrib -s -h -r /d /s" verarbeitet alle Dateien und Verzeichnisse rekursiv und wenn es viele sind dauert es zu lange (es sieht aus wie Windows erstellt zunächst die vollständige Datei-Liste und beginnt dann verarbeitet alles).
Gibt es eine Möglichkeit zu verarbeiten, nur Verzeichnisse, KEINE Dateien und nicht rekursiv mit einer bat-Datei?
Wie in perl:
opendir D, '.';
while($_ = readdir D){
if(-d $_){
#do something
}
}
closedir D;
Danke.
--
UPD: 2012-01-31, die Lösung:
for /f "delims=" %i in ('dir /ad /ah /b') do @attrib -r -s -h -a "%i"
(ersetzen Sie %i durch %%i zur Verwendung in batch-Dateien)
- Wenn das virus wirkt sich nur auf die root-Verzeichnisse, warum sind Sie der Verarbeitung aller Dateien und Verzeichnisse?
- Weil attrib Befehl nicht verwenden filter wie "nur die Verzeichnisse aus dem aktuellen Verzeichnis", das ist, warum ich diese Frage gestellt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Befehl, mit DIR die Ausgabe als Liste.
Beispielsweise beginnen Sie mit diesem :
Wobei a, b, c und d sind Verzeichnisse und Unterverzeichnisse hat. Geben Sie diesen Befehl (verwenden Sie %%, wenn Sie in einer batch-Datei) :
Welche geben wird, was Sie wollen :
Ihrer Frage verstehe ich, dass die Verarbeitung der Unterverzeichnisse sollten vermieden werden. Wenn nicht, Kommentar auf meine Antwort und ich werde es beheben.
FOR /D %i IN (\*) DO …
könnte genauso gut funktionieren (aufgrund der OP ' s Aussage, dass das virus traf nur die root-Verzeichnisse).%%
statt%
Referenzen in der Schleife var. Allerdings, @ixe013 version ist korrekt, wenn sich direkt von der Eingabeaufforderung. Auch, weil Sie beabsichtigen, verwenden Sie den Befehl in eine batch-Datei, die Sie wahrscheinlich nicht brauchen@
vorattrib
.Also ein bisschen spät - aber wir hatten gerade eine neue Variante des virus traf unsere Systeme - haben in einem 300+ Ordner von freigegebenen Laufwerk. hab alles gereinigt, aber die Attribute wieder habe ich Folgendes:
öffnen Sie eine cmd-Eingabeaufforderung in den Ordner und starten Sie:
dir /A:DHS /B > filename.txt
"/A:DHS" Ausgänge die Liste nur *D*irectory s *H*idden und *S*ystem, dann Ausgänge *B*info zu filename.txt
kopiert die Liste der Ordner-Namen aus der Datei in excel die Spalte B. in Spalte A geben Sie "attrib -H -S" und ziehen Sie ihn nach unten, um match-Anzahl der Ordner-Namen
dann in Spalte C setzen in: =A1 & "" & ZEICHEN(34) & B1 & ZEICHEN(34)
diese Ausgänge:
attrib -H -S "Ordnername"
dann einfach ziehen Sie die Formel nach unten, um den Befehl für jedes Ordnername. wählen Sie Sie alle - kopieren - einfügen in den Editor, speichern Sie die Datei als eine .cmd - legen Sie die Datei in den Ordner, wo Sie die Frage und führen Sie es.
Dies funktioniert, weil es nicht versucht, etwas zu tun rekursiv/etc läuft es einfach den Befehl aus, wechselt zur nächsten Zeile, und so weiter. dauerte etwa 3 Sekunden, um fix über 300 Ordner für mich.
Ich glaube, dass Sie nicht tun können, was Sie möchten, mit dem attrib-Befehl in einem einfachen batch-Datei. Während ich bin nicht vertraut mit es, wenn ein ernstes und langfristiges problem (virus = ich hoffe nicht), vielleicht möchten Sie sich in Powershell, wie es mit den Funktionen (und bessere Programmierbarkeit), die Sie benötigen.