dos-Befehl kaputt?


10.04.2023, 21:53

Nach einer Weile kam schließlich eine Meldung

FEHLER: Das System kann die angegebene Datei nicht finden.

Muss ich bereits eine txt-Datei mit entsprechendem Namen vorbereitet haben?

2 Antworten

Je nachdem, in welchem Verzeichnis du startest, läuft der Befehl ein paar Sekunden bis Stunden. In meinem Benutzerverzeichnis benötigt er mehrere Minuten.

Worauf schon @quick hingewiesen hat: die Ausgabeanweisung "> big_files.txt" muss außerhalb der Anführungszeichen stehen - sonst wird die Ausgabedatei bei jedem Fund überschrieben und es steht nur eine einzige Datei darin.

for /f arbeitet in diesem Fall - zumindest bei mir - um Größenordnungen schneller als forfiles:

( for /f " delims=" %A in ('dir /s /b') do @(if %~zA GTR 1048576 echo %A) ) > big_files.txt

(beachte die Klammern vor der Ausgabeumleitung - auch hier würde die Ausgabedatei sonst bei jedem Fund überschrieben).

PWolff  10.04.2023, 15:28

Wenn du auch versteckte Dateien anzeigen lassen willst,:

( for /f " delims=" %A in ('dir /a /s /b') do @(if %~zA GTR 1048576 echo %A) ) > big_files.txt

Das "/a-d" schließt Verzeichnisse aus (spielt keine Rolle, weil deren Größe sowieso mit 0 angegeben wird), aber ausdrücklich alle Dateien ein, egal, welche Attribute sie haben.

0
PWolff  10.04.2023, 15:29

Weiterer Kommentar: Ich habe hier die Mindestgröße auf 1 MiB reduziert, damit in meinem Benutzerverzeichnis überhaupt eine Datei gefunden wird. Die Zahl 1048576 müsstest du dann wieder anpassen.

0
Drachenbauer 
Fragesteller
 19.04.2023, 15:34

Wenn ich deine Zeile versuche, kommt das hier:

In Zeile:1 Zeichen:48

+ ( for /f " delims=" %A in ('dir /s /b') do @(if %~zA GTR 1048576 echo ...

+                                               ~

"(" fehlt nach "if" in der "if"-Anweisung.

   + CategoryInfo         : ParserError: (:) [], ParentContainsErrorRecordException

   + FullyQualifiedErrorId : MissingOpenParenthesisInIfStatement

0
PWolff  28.04.2023, 18:18
@Drachenbauer

Ich hatte die Zeile bei mir ausprobiert. IF benötigt keine Klammern (und wie ein Test gerade eben ergibt, mag es auch keine Klammern um den Vergleichsausdruck).

Allerdings habe ich tatsächlich etwas vergessen - nämlich die Anführungszeichen um den Dateinamen %A:

( for /f " delims=" %A in ('dir /a /s /b') do @(if %~zA GTR 1048576 echo "%A") ) > big_files.txt

Noch etwas: falls du dies in einer "Batch-Datei" / einem "Batch-Script" ausführen willst, musst du die Prozentzeichen verdoppeln:

( for /f " delims=" %%A in ('dir /a /s /b') do @(if %%~zA GTR 1048576 echo "%%A") ) > big_files.txt
0
forfiles /S /C "cmd /c if @fsize GTR 1073741824 echo @path" > big_files.txt
Anführungszeichen kommt vor der Ausgabe >big_files.txt
Dreht aber natürlich eine Weile, das File wird aber sofort erstellt. So siehst du, wenn es klappt

Drachenbauer 
Fragesteller
 11.04.2023, 21:06

Da kommt immernoch

FEHLER: Das System kann die angegebene Datei nicht finden.
0