Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Löschen von Datei Ordner aus txt. woher wissen ob Datei oder Ordner

Frage Entwicklung Batch & Shell

Mitglied: Planich

Planich (Level 1) - Jetzt verbinden

27.07.2012 um 14:39 Uhr, 4213 Aufrufe, 12 Kommentare

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?
Mitglied: baldur
27.07.2012 um 14:52 Uhr
Hi.
Der Befehl:
01.
rmdir /s /q <pfad>
löscht <Pfad> incl. Unterverzeichnissen und darin liegenden Dateien ohne Nachfrage.

Gruss,
Baldur
Bitte warten ..
Mitglied: Planich
27.07.2012 um 15:04 Uhr
das weiß ich, ich glaube du hast meine Frage nicht verstanden, oder ich habe mich unglücklich ausgedrückt

ich lese eine txt zeilenweise aus und habe jeweils einen Pfad zu einem Verzeichnis oder einer Datei
ich kann nicht auf alle Zeilen den rmdir Befehl anwenden, weil dann nur die Verzeichnisse gelöscht werden würden, nicht aber die Dateien

z.B. test\Elektrik-SicherheitsDoku-BEISPIEL.sync.doc
Bitte warten ..
Mitglied: bastla
27.07.2012, aktualisiert um 17:17 Uhr
Hallo Planich und willkommen im Forum!

Es sollte zwar
if exist "%top2%\nul"
(und eigentlich auch ohne "nul") klappen, aber im Zweifelsfall einfach
rd /s /q "%top2%" 2>nul 
del /f "%top2%" 2>nul
und eins von beiden wird funktioniert haben ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
27.07.2012, aktualisiert um 18:23 Uhr
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:
01.
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:
01.
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
Bitte warten ..
Mitglied: Planich
30.07.2012 um 16:44 Uhr
Hallo Bastla und Phil,

ich habe jetzt folgenden Zwischencode der funktioniert

@echo off
set "top2=D:\test\~ThorstenExportSTEP"
echo %top2%
if exist "%top2%\" (
rd /s /q "%top2%"
) else (
echo no
)

wenn ich jedoch das ganze auf mein "größeres" Programm anpasse haut das ganze nicht mehr hin, ich vermute ein Leerzeichen am Ende des Paths, denn wenn ich die txt mit Notepad öffne, habe ich an jedem Zeilenende hinter dem letzten Zeichen noch ein Leerzeichen. Kann mir jemand sagen wie ich das Leerzeichen am Ende einfach weglöschen kann?

Danke für eure Hilfe
Bitte warten ..
Mitglied: bastla
30.07.2012 um 17:12 Uhr
Hallo Planich!
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) einfach
echo "%top2%"
schreibst ...

Grüße
bastla
Bitte warten ..
Mitglied: Planich
31.07.2012 um 07:42 Uhr
genau so habe ich es schon probiert und deshalb den Fehler nicht weiter beschrieben, sondern mit meiner Vermutung "eingegrenzt"

Hier mal der kleine Code

@echo off
set "top2=D:\test\~ThorstenExportSTEP"
echo %top2%
if exist "%top2%\" (
rd /s /q "%top2%"
) else (
echo no
)


und hier der "große"

REM Dateien löschen
for /f "delims=" %%a in (%var_txtpath%) do (
set "top=%%a"
call :prozedurdelete
)
:prozedurdelete
set "top2=!Laufwerksbuchstabe!!top!"
echo %top2%
if exist "%top2%\" (
rd /s /q %top2%
) else (
erase "%top2%"
)
goto :eof

wobei das hier in der txt steht
"
test\~ThorstenExportSTEP
"
wie gesagt am Ende jeder Zeile in der txt ist ein Leerzeichen
Bitte warten ..
Mitglied: bastla
31.07.2012 um 11:04 Uhr
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
01.
REM Dateien löschen 
02.
for /f %%a in (%var_txtpath%) do ( 
03.
    rd /s/q %Laufwerksbuchstabe%%%a 2>nul 
04.
    del /f %Laufwerksbuchstabe%%%a 2>nul 
05.
)
schon genügen ...
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
Bitte warten ..
Mitglied: Planich
31.07.2012, aktualisiert um 11:48 Uhr
Hallo bastla,
ok dann hier mal der gesamte Code

01.
@echo off 
02.
REM Zeitvariablen setzen 
03.
FOR /F "tokens=1-6 delims=.,: " %%i IN ('ECHO %DATE% %TIME%') DO ( 
04.
	SET  _DAY=%%i 
05.
	SET  _MON=%%j 
06.
	SET _YEAR=%%k 
07.
	SET _HOUR=%%l 
08.
	SET  _MIN=%%m 
09.
	SET  _SEC=%%n 
10.
11.
IF %_HOUR%==9 SET _HOUR=0%_HOUR% 
12.
IF %_HOUR%==8 SET _HOUR=0%_HOUR% 
13.
IF %_HOUR%==7 SET _HOUR=0%_HOUR% 
14.
IF %_HOUR%==6 SET _HOUR=0%_HOUR% 
15.
IF %_HOUR%==5 SET _HOUR=0%_HOUR% 
16.
IF %_HOUR%==4 SET _HOUR=0%_HOUR% 
17.
IF %_HOUR%==3 SET _HOUR=0%_HOUR% 
18.
IF %_HOUR%==2 SET _HOUR=0%_HOUR% 
19.
IF %_HOUR%==1 SET _HOUR=0%_HOUR% 
20.
IF %_HOUR%==0 SET _HOUR=0%_HOUR% 
21.
 
22.
setlocal enabledelayedexpansion 
23.
 
24.
set Laufwerksbuchstabe=D:\ 
25.
set var_txtpath=%Laufwerksbuchstabe%%_YEAR%%_MON%%_DAY%_%_HOUR%%_MIN%%_SEC%Log.txt 
26.
set var_zippath=%Laufwerksbuchstabe%%_YEAR%%_MON%%_DAY%_%_HOUR%%_MIN%%_SEC%.7z 
27.
 
28.
set "sevenzpath=C:\Program Files (x86)\7-Zip\7zG.exe" 
29.
set "rootpath=D:\test\" 
30.
 
31.
REM schauen ob die ext. Festplatte angeschlossen ist und wir den richtigen Laufwerksbuchstaben vermuten 
32.
for /f %%a in ('find "12345678" "H:\flag.txt"') do set T=%%a 
33.
if %T%==12345678 goto check2 
34.
Echo Laufwerk H:\ und Flag Datei nicht gefunden >> %var_txtpath% 
35.
goto exit 
36.
 
37.
:check2 
38.
REM schauen ob 7-Zip im richtigen Ordner liegt 
39.
Echo Flag-Datei gefunden 
40.
if exist "%sevenzpath%" goto doit 
41.
Echo 7-Zip im falschen Ordner oder nicht vorhanden >> %var_txtpath% 
42.
goto exit 
43.
 
44.
REM Start des Vorgangs 
45.
:doit 
46.
Echo 7zip.exe gefunden - Beginne Vorgang 
47.
REM Dateien mit "~" 
48.
for /f "tokens=*" %%i in ('dir "%rootpath%~*" /a /s /b') do ( 
49.
set "top=%%i" 
50.
call :prozedur															 
51.
52.
REM .sync Dateien 
53.
for /f "tokens=*" %%i in ('dir "%rootpath%*.sync*" /a /s /b') do ( 
54.
set "top=%%i" 
55.
call :prozedur	 
56.
57.
REM .$$. Dateien 
58.
for /f "tokens=*" %%r in ('dir "%rootpath%*.$*$*" /a /s /b') do ( 
59.
set "top=%%r" 
60.
call :prozedur	 
61.
62.
REM Packen der Dateien 
63.
d: 
64.
"%sevenzpath%" a -t7z %var_zippath% "@%var_txtpath%" -scsWIN 
65.
 
66.
REM Dateien löschen 
67.
for /f "delims=" %%a in (%var_txtpath%) do ( 
68.
set "top=%%a" 
69.
call :prozedurdelete 
70.
71.
goto exit 
72.
 
73.
REM Call in Sprungmarke :prozedur wird benötigt, da der set Befehl in der FOR Schleife nicht funktioniert 
74.
:prozedur 
75.
REM echo %top2% 
76.
REM Erste drei Zeichen vorn abschneiden, damit 7zip beim Packen die Ordnerstruktur übernimmt 
77.
set "top2=!top:~3!" 
78.
REM Umlaute aktivieren 
79.
chcp 1252>nul						 
80.
echo %top2% >> %var_txtpath% 
81.
REM Umlaute deaktivieren 
82.
chcp %CP%>nul 
83.
REM um aus :prozedur herauszukommen	 
84.
goto :eof 
85.
 
86.
:prozedurdelete 
87.
set "top2=!Laufwerksbuchstabe!!top!" 
88.
echo %top2% 
89.
if exist "%top2%\" ( 
90.
rd /s /q "%top2%" 
91.
) else (  
92.
erase "%top2%" 
93.
94.
goto :eof 
95.
 
96.
:exit 
97.
endlocal 
98.
PAUSE
Ich kriege beim Ausführen immer die Meldung "Das System kann den angegebenen Pfad nicht finden"

Deinem letzten Hinweis mit dem "gogo :eof" kann ich nicht ganz folgen, vielleicht kannst du mir jetzt die Zeile nennen. Mir fällt grad nix auf wo das Sinn machen würde bzw. hab ich es ja schon eingebaut.

Gruß und Danke
Planich
Bitte warten ..
Mitglied: bastla
31.07.2012, aktualisiert um 14:45 Uhr
Hallo Planich!

Etwas angepasst / gestrafft:
01.
@echo off 
02.
REM Zeitvariablen setzen 
03.
FOR /F "tokens=1-6 delims=.,: " %%i IN ('ECHO %DATE% %TIME%') DO ( 
04.
	SET  "_DAY=%%i" 
05.
	SET  "_MON=%%j" 
06.
	SET "_YEAR=%%k" 
07.
	SET "_HOUR=%%l" 
08.
	SET  "_MIN=%%m" 
09.
	SET  "_SEC=%%n" 
10.
11.
IF %_HOUR% lss 10 SET "_HOUR=0%_HOUR%" 
12.
 
13.
set Laufwerksbuchstabe=D:\ 
14.
set "var_txtpath=%Laufwerksbuchstabe%%_YEAR%%_MON%%_DAY%_%_HOUR%%_MIN%%_SEC%Log.txt" 
15.
set "var_zippath=%Laufwerksbuchstabe%%_YEAR%%_MON%%_DAY%_%_HOUR%%_MIN%%_SEC%.7z" 
16.
 
17.
set "sevenzpath=C:\Program Files (x86)\7-Zip\7zG.exe" 
18.
set "rootpath=D:\test\" 
19.
 
20.
REM schauen ob die ext. Festplatte angeschlossen ist und wir den richtigen Laufwerksbuchstaben vermuten 
21.
for /f %%a in ('find "12345678" "H:\flag.txt"') do set "T=%%a" 
22.
if "%T%"=="12345678" goto check2 
23.
>>%var_txtpath% Echo Laufwerk H:\ und Flag Datei nicht gefunden 
24.
goto exit 
25.
 
26.
:check2 
27.
REM schauen ob 7-Zip im richtigen Ordner liegt 
28.
Echo Flag-Datei gefunden 
29.
if exist "%sevenzpath%" goto doit 
30.
>>%var_txtpath% Echo 7-Zip im falschen Ordner oder nicht vorhanden 
31.
goto exit 
32.
 
33.
REM Start des Vorgangs 
34.
:doit 
35.
Echo 7zip.exe gefunden - Beginne Vorgang 
36.
REM Dateien mit "~" 
37.
for /f "tokens=*" %%i in ('dir "%rootpath%~*" /a /s /b') do ( 
38.
    set "top=%%i" 
39.
    call :prozedur															 
40.
41.
REM .sync Dateien 
42.
for /f "tokens=*" %%i in ('dir "%rootpath%*.sync*" /a /s /b') do ( 
43.
    set "top=%%i" 
44.
    call :prozedur	 
45.
46.
REM .$$. Dateien 
47.
for /f "tokens=*" %%r in ('dir "%rootpath%*.$*$*" /a /s /b') do ( 
48.
    set "top=%%r" 
49.
    call :prozedur	 
50.
51.
REM Packen der Dateien 
52.
d: 
53.
"%sevenzpath%" a -t7z %var_zippath% "@%var_txtpath%" -scsWIN 
54.
 
55.
REM Dateien löschen 
56.
for /f "delims=" %%a in (%var_txtpath%) do ( 
57.
    rd /s /q "%Laufwerksbuchstabe%%%a" 2>nul 
58.
    del /f "%Laufwerksbuchstabe%%%a" 2>nul 
59.
60.
goto exit 
61.
 
62.
REM Call in Sprungmarke :prozedur wird benötigt, da der set Befehl in der FOR Schleife nicht funktioniert 
63.
:prozedur 
64.
REM echo %top2% 
65.
REM Erste drei Zeichen vorn abschneiden, damit 7zip beim Packen die Ordnerstruktur übernimmt 
66.
set "top2=%top:~3%" 
67.
REM Umlaute aktivieren 
68.
for /f "tokens=3 delims=. " %%i in ('chcp') do set "CP=%%i" 
69.
chcp 1252>nul						 
70.
>>%var_txtpath% echo %top2% 
71.
REM Umlaute deaktivieren 
72.
chcp %CP%>nul 
73.
REM um aus :prozedur herauszukommen	 
74.
goto :eof 
75.
 
76.
:exit 
77.
endlocal 
78.
PAUSE
Die Leerzeichen am Ende der Pfade hattest Du übrigens Deiner Zeile 80 zu verdanken:
echo %top2% >> %var_txtpath%
"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]
Bitte warten ..
Mitglied: Planich
31.07.2012, aktualisiert um 13:28 Uhr
es funktioniert mit deinem Quellcode leider nicht :D

in meiner txt steht dann
"
!top:~3!
"

folglich wird auch nichts gepackt von 7zip und es wird auch nichts gelöscht

ich kann deine Zeile 68 auch nicht richtig nachvollziehen, zumal ich auch chcp nicht wirklich verstanden habe, als ich es verwendete. Ich habe das nur als Lösung für mein Umlautproblem im Netz gefunden.
Vielleicht kannst du mir das nochmal erklären

Edit:

Wenn ich meine eigene Version anpasse funktionierts

01.
echo %top2% >> %var_txtpath%
abändern in:

01.
echo %top2%>>%var_txtpath%
und schon erstellt er da nicht unsinniger Weise ein Leerzeichen und es tut was es soll :D

danke
Bitte warten ..
Mitglied: bastla
31.07.2012 um 14:49 Uhr
Hallo Planich!
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
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Windows 10
Löschen von Ordner mit Dateien (3)

Frage von jerry32 zum Thema Windows 10 ...

Batch & Shell
CMD-Batch hilfe: Dateiname zu txt (2)

Frage von Syscore64 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...