Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

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

Mitglied: Planich

Planich (Level 1) - Jetzt verbinden

27.07.2012 um 14:39 Uhr, 4249 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 ..
Ähnliche Inhalte
Windows Server
GPO - woher nehmt Ihr Euer Wissen?
gelöst Frage von PharITWindows Server12 Kommentare

Hallo allerseits, da ich immer wieder erstaunt bin, mit welchen GPO die Spezialisten hier so hantieren zum Teil kenne ...

Batch & Shell
Mit Batch einen Ordne mit .txt Dateien nach einem Wort durchsuchen
gelöst Frage von noah1400Batch & Shell8 Kommentare

Hallo Ich möchte eine Art login mit Batch programieren. Als erstes gibt es eine Eingabe dort gibt man seinen ...

Batch & Shell
Ordner löschen per Batch
gelöst Frage von MarcysBatch & Shell3 Kommentare

Hallo, Ich möchte aus einem Verzeichnis einen den Ordner "MC" löschen: C:\Programme\HYP\MC Dies möchte ich per Batch machen. Wie ...

Batch & Shell
Dateien (keine Ordner) löschen die älter sind als
gelöst Frage von siziigilendirmezBatch & Shell4 Kommentare

Guten Morgen ich möchte gerne mit einer power Shell Dateien löschen die älter als 30 tage sind. Die Dateien ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 10 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 11 StundenSicherheit7 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 12 StundenSicherheit8 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 12 StundenSicherheit12 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen20 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...