Batch Löschen von Datei Ordner aus txt. woher wissen ob Datei oder Ordner
Hallo,
ich habe in einer txt eine Menge Pfade, das sieht etwa so aus
"test\~ThorstenExportSTEP
test\DIN_EN62079_Erstellen von Anleitungen Gliederung, Inhalt und Darstellung.sync.PDF
test\Elektrik-SicherheitsDoku-BEISPIEL.sync.doc
test\EN 842.sync.pdf"
nun möchte ich alles löschen, egal ob Datei oder Ordner
ich kenn aber keinen Befehl der einfach Datei und Ordner löscht, sondern nur entweder oder, also möchte ich jetzt prüfen ob das ganze ein Ordner ist, wenn ja den rmdir Befehl nutzen, ansonsten den erase.
Wie kann ich das überprüfen, oder gibt es doch einen Befehl der Verzeichnisse und Dateien gleichermaßen löscht?
Danke und ein schönes Wochenende
PS: im Netz habe ich zum Prüfen etwas gefunden, das für mich leider nicht funktioniert hat
if exist %1\* echo Directory
wenn ich das auf mich abändere z.B.
if exist %top2%\*
krieg ich nur nen Fehler
%1 ist doch keine korrekte Variable oder was bedeutet das?
ich habe in einer txt eine Menge Pfade, das sieht etwa so aus
"test\~ThorstenExportSTEP
test\DIN_EN62079_Erstellen von Anleitungen Gliederung, Inhalt und Darstellung.sync.PDF
test\Elektrik-SicherheitsDoku-BEISPIEL.sync.doc
test\EN 842.sync.pdf"
nun möchte ich alles löschen, egal ob Datei oder Ordner
ich kenn aber keinen Befehl der einfach Datei und Ordner löscht, sondern nur entweder oder, also möchte ich jetzt prüfen ob das ganze ein Ordner ist, wenn ja den rmdir Befehl nutzen, ansonsten den erase.
Wie kann ich das überprüfen, oder gibt es doch einen Befehl der Verzeichnisse und Dateien gleichermaßen löscht?
Danke und ein schönes Wochenende
PS: im Netz habe ich zum Prüfen etwas gefunden, das für mich leider nicht funktioniert hat
if exist %1\* echo Directory
wenn ich das auf mich abändere z.B.
if exist %top2%\*
krieg ich nur nen Fehler
%1 ist doch keine korrekte Variable oder was bedeutet das?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188728
Url: https://administrator.de/forum/batch-loeschen-von-datei-ordner-aus-txt-woher-wissen-ob-datei-oder-ordner-188728.html
Ausgedruckt am: 15.05.2025 um 04:05 Uhr
12 Kommentare
Neuester Kommentar
moin mitnander,
%1 beschreibt den Zurzeit ersten Parameter innerhalb des Batches.
und falls es doch unbeding erst Vorher geprüft werden soll.
test auf der CMD-Line:
Analog zu Deiner Textdatei wäre es (in einem Batch) in etwa so:
Das echo zeigt was es Täte - wenn Du es entfernst tut es.
Gruß Phil
%1 beschreibt den Zurzeit ersten Parameter innerhalb des Batches.
und falls es doch unbeding erst Vorher geprüft werden soll.
test auf der CMD-Line:
for %i in (c:\users A:\ A:\test A:\anderes.txt D:\neues *) do @dir /b "%i?" 2>nul >&2 &&(if exist "%i\" (echo Ordner: %i) else echo Datei: %i)||echo Datei nicht gefunden.
Analog zu Deiner Textdatei wäre es (in einem Batch) in etwa so:
for /f usebackqdelims^= %%i in ("D:\Das Textdokument mit dem zu loeschenden sachen") do @dir /b "%%i?" 2>nul >&2 &&(if exist "%%i\" (echo rd /s /q "%%~i") else echo del /f "%%~i")||echo Datei %%i nicht gefunden.
Das echo zeigt was es Täte - wenn Du es entfernst tut es.
Gruß Phil
Hallo Planich!

schreibst ...
Grüße
bastla
haut das ganze nicht mehr hin
ist eine interessante Fehlerbeschreibung ... ich vermute ein Leerzeichen am Ende des Paths
Soferne Du damit Deine Variable %top2% meinst, ist das lt obigem Code auszuschließen - was Du auch leicht prüfen kannst, indem Du in Zeile 3 (die als solche auch leicht erkennbar wäre, wenn Du "Code"-Formatierung verwendet hättest) einfachecho "%top2%"
Grüße
bastla
Hallo Planich!
Der "große" Code ist aber erstens auch noch nicht die ganze Wahrheit, und zweitens unnötig groß - unter der Annahme, dass die Pfade in der Textdatei keine Leerzeichen (außer jenen am Ende - und wie die dorthin gekommen sind, kannst nur Du wissen bzw lässt sich aus den bisher geposteten Informationen nicht feststellen) enthalten, sollte eigentlich
schon genügen ...
Wenn Du bei Deinem Ansatz bleiben willst, brauchst Du zumindest noch ein "
Grüße
bastla
Der "große" Code ist aber erstens auch noch nicht die ganze Wahrheit, und zweitens unnötig groß - unter der Annahme, dass die Pfade in der Textdatei keine Leerzeichen (außer jenen am Ende - und wie die dorthin gekommen sind, kannst nur Du wissen bzw lässt sich aus den bisher geposteten Informationen nicht feststellen) enthalten, sollte eigentlich
REM Dateien löschen
for /f %%a in (%var_txtpath%) do (
rd /s/q %Laufwerksbuchstabe%%%a 2>nul
del /f %Laufwerksbuchstabe%%%a 2>nul
)
Wenn Du bei Deinem Ansatz bleiben willst, brauchst Du zumindest noch ein "
goto :eof
" vor dem Unterprogramm (wenn Du "Code"-Formatierung verwendet hättest, könnte ich jetzt auch die entsprechende Zeilennummer nennen), aber nicht die Schreibweise der Variablen mit "!" anstatt "%" ...Grüße
bastla
Hallo Planich!
Etwas angepasst / gestrafft:
Die Leerzeichen am Ende der Pfade hattest Du übrigens Deiner Zeile 80 zu verdanken:
"works as designed"
- es wird "%top2%Leerzeichen%" in die Datei geschrieben; wie's anders gehen kann, siehst Du oben ...
Grüße
bastla
[Edit] Zeile 66 korrigiert [/Edit]
Etwas angepasst / gestrafft:
@echo off
REM Zeitvariablen setzen
FOR /F "tokens=1-6 delims=.,: " %%i IN ('ECHO %DATE% %TIME%') DO (
SET "_DAY=%%i"
SET "_MON=%%j"
SET "_YEAR=%%k"
SET "_HOUR=%%l"
SET "_MIN=%%m"
SET "_SEC=%%n"
)
IF %_HOUR% lss 10 SET "_HOUR=0%_HOUR%"
set Laufwerksbuchstabe=D:\
set "var_txtpath=%Laufwerksbuchstabe%%_YEAR%%_MON%%_DAY%_%_HOUR%%_MIN%%_SEC%Log.txt"
set "var_zippath=%Laufwerksbuchstabe%%_YEAR%%_MON%%_DAY%_%_HOUR%%_MIN%%_SEC%.7z"
set "sevenzpath=C:\Program Files (x86)\7-Zip\7zG.exe"
set "rootpath=D:\test\"
REM schauen ob die ext. Festplatte angeschlossen ist und wir den richtigen Laufwerksbuchstaben vermuten
for /f %%a in ('find "12345678" "H:\flag.txt"') do set "T=%%a"
if "%T%"=="12345678" goto check2
>>%var_txtpath% Echo Laufwerk H:\ und Flag Datei nicht gefunden
goto exit
:check2
REM schauen ob 7-Zip im richtigen Ordner liegt
Echo Flag-Datei gefunden
if exist "%sevenzpath%" goto doit
>>%var_txtpath% Echo 7-Zip im falschen Ordner oder nicht vorhanden
goto exit
REM Start des Vorgangs
:doit
Echo 7zip.exe gefunden - Beginne Vorgang
REM Dateien mit "~"
for /f "tokens=*" %%i in ('dir "%rootpath%~*" /a /s /b') do (
set "top=%%i"
call :prozedur
)
REM .sync Dateien
for /f "tokens=*" %%i in ('dir "%rootpath%*.sync*" /a /s /b') do (
set "top=%%i"
call :prozedur
)
REM .$$. Dateien
for /f "tokens=*" %%r in ('dir "%rootpath%*.$*$*" /a /s /b') do (
set "top=%%r"
call :prozedur
)
REM Packen der Dateien
d:
"%sevenzpath%" a -t7z %var_zippath% "@%var_txtpath%" -scsWIN
REM Dateien löschen
for /f "delims=" %%a in (%var_txtpath%) do (
rd /s /q "%Laufwerksbuchstabe%%%a" 2>nul
del /f "%Laufwerksbuchstabe%%%a" 2>nul
)
goto exit
REM Call in Sprungmarke :prozedur wird benötigt, da der set Befehl in der FOR Schleife nicht funktioniert
:prozedur
REM echo %top2%
REM Erste drei Zeichen vorn abschneiden, damit 7zip beim Packen die Ordnerstruktur übernimmt
set "top2=%top:~3%"
REM Umlaute aktivieren
for /f "tokens=3 delims=. " %%i in ('chcp') do set "CP=%%i"
chcp 1252>nul
>>%var_txtpath% echo %top2%
REM Umlaute deaktivieren
chcp %CP%>nul
REM um aus :prozedur herauszukommen
goto :eof
:exit
endlocal
PAUSE
echo %top2% >> %var_txtpath%
Grüße
bastla
[Edit] Zeile 66 korrigiert [/Edit]
Hallo Planich!

Grüße
bastla
es funktioniert mit deinem Quellcode leider nicht :D
Mit der inzwischen korrigierten Zeile 66 sollten die Chancen besser sein ... ich kann deine Zeile 68 auch nicht richtig nachvollziehen, zumal ich auch chcp nicht wirklich verstanden habe
Hier wird einfach die aktuelle Codepage (dürfte 850 sein) als %CP% zwischengespeichert - ansonsten wäre die Zeile 72 (bei Dir oben 82) sinnlos ...Grüße
bastla