
EINLESEN, AUSLESEN UND AUSGEBEN ALS VARIABLEN IN DOS
von Textteilen: Verzeichnispfaden, Datum, Zeit etc.


WINDOWS 98


In Windows XP und hher ist DOS (dort: mit CMD.EXE) zu einer erweiterten
Programmiersprache geworden, was manche Operation doch sehr erleichtert;
beispielsweise das Einlesen von Zeilen aus Textdateien und
Programmausgaben als Variablen, die man in DOS anschlieend weiter
verarbeiteten kann. Im alten DOS unter Windows 9x ist das nur ber
Umwege mglich.

Diese werden hier beschreiben.

Man mu in Windows 9x sich beispielsweise bei

CD (=Verzeichnispfad, lang) oder
TRUENAME (=Verzeichnispfad, 8.3)

damit begngen, deren Ausgabe in eine Textdatei schreiben zu lassen.


CD > XYZ.TXT
TRUENAME > XYZ.TXT


[ Dabei schreibt CD in die erste Zeile, TRUENAME in die zweite; dieses
gibt es bei der Auswahl der Variablen zu beachten. Ggf. mit sort /R die
Leerzeile nach unten verschieben! ]

Diese Textdatei mte dann zur Weiterverarbeitung unter Zuhilfenahme von
temporren Dateien in DOS ausgelesen und einzelne Zeilen als Variable
gespeichert werden.

[ Ggf. mit FIND die Zeile ausfindig machen, s. weiter unten ]


Einige Mglichkeiten werden hier dargestellt. Sie befinden sich
aktualisiert zum Herunterladen in

COPYDAT.ZIP
und
EINGABE.ZIP,

zu finden in:

[http://www.erleuchtet.gmxhome.de/hilfe/dosmini1.htm]
und
[http://www.erleuchtet.gmxhome.de/fw/fw-index.htm]



Anmerkung:

Das alte MS-DOS ist vom Speicher her begrenzt, was die beispielsweise
Zeichenanzahl in Dateipfaden, Verzeichnistiefe etc. angeht. Sollte eine
Batch-Datei nicht funktionieren, das Ganze eine Etage tiefer versuchen:
Verzeichnispfad verkrzen, oder die komplette Batch-Datei in einzelne
Batch-Datei aufteilen und diese nacheinander mit CALL abrufen.

Die im Folgenden hufig benutzen Dateien KN_UMBR1.bat und KN_UMBR2.bat
mssen im selben Verzeichnis wie Batch-Datei liegen; sicherer ist es,
sie mit absoluten Pfaden anzusprechen, also etwa
C:/WINDOWS/COMMAND/KN_UMBR1.bat.

REM bedeutet einen Kommentar, der meistens nicht beachtet wird. Wo REM
nicht funktioniert, wie manchmal bei FOR-Schleifen, # oder :: versuchen.

Darber hinaus benimmt sich eine Batch-Datei sehr unterschiedlich, je
nachdem, wie man sie aufruft: In welchem Verzeichnis, ber eine
Verknpfung oder direkt, etc; je nachdem, wie dann die interne Pfade und
Variablen lauten. Ausprobieren und dann festlegen!







VERZEICHNISWECHSEL IN DOS

Aus dem Netz:

[http://de.wikibooks.org/wiki/Batch-Programmierung:_Wichtige_DOS-Kommandos]


RELATIVE PFAD-ANGABEN IN DOS:

> Die Eingabe von "CD .." wechselt in das nchsthhere Verzeichnis
  ("CD ..\.." zwei Ebenen hher usw.). 
  [ Zurck oder 'Tiefer' ist nicht mglich - wohin? ]

> Die Eingabe von "CD ORDNERNAME"
  wechselt in den Unterordner ORDNERNAME.  
  


ABSOLUTE PFAD-ANGABEN IN DOS

> Die Eingabe von "CD \" wechselt absolut
  in das Hauptverzeichnis auf dem derzeitig befindlichen Laufwerk.

> Die Eingabe von "CD \ORDNERNAME" wechselt absolut
  in den Ordner ORDNERNAME auf dem derzeitig befindlichen Laufwerk.

> Die Eingabe von "LAUFWERKSBUCHSTABE:" (ohne vorangestelltes "CD")
  wechselt in das aktuelle Verzeichnis des gewhlten Laufwerks
  LAUFWERKSBUCHSTABE.

> Die Eingabe von "CD LAUFWERKSBUCHSTABE:\ORDNERNAME" wechselt absolut
  in den Ordner ORDNERNAME auf dem gewhlten Laufwerk von
  LAUFWERKSBUCHSTABE jedoch nicht von einem Laufwerk auf ein anderes.

Pfadangaben mit Leerzeichen (z.B. "C:\program files\") mssen in
Anfhrungszeichen eingeschlossen sein.



VERZEICHNIS ALPHABETISCH GEORDNET SEITENWEISE ANZEIGEN IN DOS


DIR /O/P



VERZEICHNIS MIT KURZEN 8.3 NAMEN ANZEIGEN IN DOS


DIR /X



ANWENDUNG (in WINDOWS 7):



FEHLER:

Ein Ordnernamen hat durch einen Fehler Leerzeichen am Ende erhalten:
[XXX   ] 	Statt  [XXX]


- Ein solcher Verzeichnisname kann in Windows zwar angezeigt,
das Verzeichnis selber aber nicht gelscht werden.

- Es zeigt darber hinaus  merkwrdige und ungemtliche Dinge an,
wie "@shell32.dll,-8506" o. . unter der rechten Maustaste.



FEHLERBEHEBUNG:


1) Das Verzeichnis mit dem ungltigen Namen leeren


2) In Start/ Ausfhren oder Start/ "Programme/Dateien durchsuchen"

"CMD"

eingeben und die DOS-Box ffnen


3) In der DOS-Box in das Verzeichnis wechseln, das den ungltig benannten
Ordner enthlt, und dort

DIR /AD /X

eingeben. Das zeigt (nur) die enthaltenen Unterverzeichnisse mit ihren
DOS-Namen im 8.3 Format an, darunter auch das ungltig benannte [XXX  ]
als [XXX~1]  . .


4) Diesen Namen zur weiteren Behandlung benutzen, also  beispielsweise

den Ordner umbenennen:

REN XXX~1 NeuerName

oder lschen:

RD XXX~1


Das war's.








EINZELNE ZEILEN FINDEN IN DOS


Mit dem Befehl "FIND" lassen sich einzelne Zeilen, welche die gesuchten
Suchbegriffe enthalten, aus angegebenen Dateien herausfischen - mit der
manchmal lstigen Angabe der Datei selbst:

---------- xyz.txt
gefundene Zeile

Mit Hilfe der Pipe | ([AltGr] + [><|]) lt sich aber die Zeile ohne
Umwege einer Datei direkt aus der Befehlsausgabe selbst herausziehen,
wenn es sein mu sogar mit weiteren anschlieenden Suchfiltern:

DIR | FIND "Datei(en)"

extrahiert beispielsweise jede einzelne Zeile einer DOS-
Verzeichnisauflistung, die "Datei(en)" enthlt - also meistens die,
welche die Zahl der Dateien enthlt. [ ACHTUNG: FIND unterscheidet
streng zwischen Gro- und Kleinschreibung! Abhilfe: /I ]

Ein Bsewicht knnte aber eine Datei schaffen mit dem Namen "Datei(en)"
und so das Ergebnis verflschen. Eine ausschlieende Suche nach ":"
entfernt alle Zeilen, die ":" enthalten; also im Allgemein die
Zeitangaben zu den Datei(en): [ /V findet Zeilen OHNE den Suchbegriff ]


DIR | FIND "Datei(en)" | FIND /V ":"

Findet die Zahl der Dateien im Verzeichnis


DIR | FIND "Verzeichnis(se)" | FIND /V ":"

Findet die Zahl der Verzeichnisse im Verzeichnis- eine merkwrdig
falsche und inkonsistente Angabe: Im Stammverzeichnis korrekt,
im Unterverzeichnis um 2 zu hoch.


DIR | FIND "test" /I

Findet alle Dateinamen die "test" enthalten


FIND "man" < test.txt

Findet alle Zeilen in der Datei "test.txt" die "man" enthalten
und schreibt sie untereinander


DATE | FIND "akt" /I
TIME | FIND "akt" /I

wrde die AKTuelle Zeit bzw. das AKTuelle Datum auswerfen, wenn nicht
der Befehl "DATE" bzw. "TIME" eine Eingabe erfordern wrden. Um das
Hngen der Batch-Datei zu verhindern, mu man deshalb mit "ECHO." eine
Eingabe mit [ENTER] simulieren: *

[ * ECHO. unterdrckt auch die Meldung "ECHO ist ausgeschaltet (OFF)" ]


ECHO.|DATE | FIND "akt" /I
ECHO.|TIME | FIND "akt" /I



Zum Ausprobieren: Die folgenden Zeilen in eine Batch-Datei mit dem
Namen "aktdat.bat" kopieren, um diese sich selbst finden zu lassen:
(In einem mglichst leeren Verzeichnis!)





@ECHO OFF

ECHO.|DATE > xyz.txt
FIND "akt" xyz.txt /I

ECHO.
ECHO Direkt extrahiert:
ECHO.

ECHO.|DATE | FIND "akt" /I

ECHO.|TIME | FIND "akt" /I

PAUSE

DIR

ECHO.
ECHO AUSGABE:
ECHO.

DIR | FIND "verz" /I

DIR | FIND "dat" /I

PAUSE

ECHO.
ECHO DOS-Verzeichnis-Name:

TRUENAME

PAUSE

ECHO.|DATE | FIND "akt" /I >> xyz.txt

ECHO.|TIME | FIND "akt" /I >> xyz.txt

DIR | FIND "verz" /I >> xyz.txt

DIR | FIND "dat" /I >> xyz.txt

TRUENAME >> xyz.txt

PAUSE

DIR | FIND "AKT" /I
DIR | FIND "AKT" /I >> xyz.txt

FIND "TRUE" < AKTDAT.BAT /I
FIND "TRUE" < AKTDAT.BAT /I >> xyz.txt

PAUSE

CLS




DATEINAMEN MIT AKTUELLEM DATUM ERGNZEN

Hier ein Beispiel, wie man ber Zwischendateien Dateinamen mit aktuellem
Datum ergnzen kann, beispielsweise die Datei

FOTO.JPG als FOTO_*DATUM*.JPG

abspeichern, um diese als Sicherung mit einem eindeutigen Namen zu
versehen.


----

echo.|date>datum.bat
echo set DATUM=%%3>aktuelles.bat
REM echo set DATUM=%%3%%4>aktuelles.bat REM GGF.
call datum.bat
ren foto.jpg foto_%DATUM%.jpg
del datum.bat
del aktuelles.bat

cls


----


Will man mehrere Dateien so ndern, mu man die entsprechenden Zeilen in
eine FOR- Schleife einbringen.


Erklrung:

Die erste Zeile wirft beispielsweise in die erste Zeile von 'datum.bat'
Aktuelles Datum: Di, 11.11.2011
aus

Die zweite Zeile wirft in die erste Zeile von 'aktuelles.bat'
set DATUM=%3%4
aus

Die dritte Zeile ruft nun mit datum.bat in etwa folgendes ab:
setze (Variable) DATUM=%3 fr Datum: Di, 11.11.2011
- Weil "aktuelles" in Zeile 1 die Datei 'aktuelles.bat' aktiviert
[ %1 wre 'Datum:' ; %2 wre 'Di' . ] 





DOS - VERZEICHNIS AUSGEBEN


EXKURS: (Fremde Seite)

[http://www.dosware.de/home/tips.htm]

Wechsel ins Verzeichnis der laufenden Batch-Datei

Oftmals ist es wichtig, dass beim Start einer Batch-Datei ein bestimmtes
Verzeichnis geffnet ist, damit z.B. relative Pfadangaben in der Batch-
Datei funktionieren o.. Die Variable %0 liefert den vollstndigen
Dateipfad der gerade laufenden Batch-Datei. Das Problem ist, den
Dateinamen vom Pfad abzuschneiden, um an den "reinen" Verzeichnispfad zu
kommen. Dies erledigt DOS jedoch von selbst:

CD %0\..

Hinweis: Funktioniert nur in Batch-Dateien



Alle Suchpfade im PATH-Eintrag abklappern

Der PATH-Eintrag in der AUTOEXEC.BAT enthlt i.d.R. mehrere
Verzeichnispfade, die durch ein Semikolon (;) voneinander getrennt sind.
Soll z.B. mit dem DIR-Befehl nur in diesen Verzeichnissen nach einer
bestimmten Datei gesucht werden, msste der PATH-Eintrag eigentlich in
seine einzelnen Pfade zerlegt werden und der DIR-Befehl dann
nacheinander mit jedem dieser Einzelpfade aufgerufen werden. Und das
geht mit einer einzigen Code-Zeile:

for %%n in (%path%) do dir %%n\gesucht.txt

DOS zerlegt den PATH-Eintrag ganz von selbst in seine Einzelpfade, denn
neben dem bekannten Leerzeichen ist auch das Semikolon ein Trennzeichen.
Das gilt auch fr Tabulatoren und Kommata. Deswegen funktionieren auch
solche kuriosen Befehle wie:

copy;quell.txt;ziel.txt oder ,dir,

Hinweis: Die %path%-Variable wird nur in Batch-Dateien interpretiert.


Anmerkung:

Die Schleife mu ggf. jedes Mal vor Aufruf der Datei durchlaufen werden



EXKURS Ende






DATEI-EIGENSCHAFTEN ALS VARIABLE SPEICHERN


Als Beispiel: Eine Batch-Datei, die das aktuelle Verzeichnis mit Pfad 
als Langnamen ausliest, diesen als Variable speichert und in einer 
Datei namens 'AUSGABE.TXT' sichert.


Bentigt wird dazu noch im selben Verzeichnis die Hilfs-Datei
'kn_umbr1.bat', bestehend aus der einzigen Zeile:

'Hole '

- Ohne Anfhrungszeichen und mit Leerzeichen, aber ohne Zeilenumbruch
am Ende!

Dieser entsteht u. U. automatisch und mu anschlieend im Texteditor
entfernt werden, damit der Befehl ">>" den nchsten Ausdruck dahinter
und nicht darunter setzt.

Dadurch wird die dahinter stehende Zeile Wort fr Wort ausgelesen und
Wort fr Wort einzeln als Variable gespeichert - bis zu 9.



EXKURS:

In MS-DOS 6.x ist es nicht mglich, Texte zeilenweise auszulesen.
DIE JEWEILS ERSTE ZEILE allerdings schon. Wenn auch eingeschrnkt:

Bentigt wird dazu noch im selben Verzeichnis die Hilfs-Datei
'kn_umbr2.bat', diesmal bestehend aus der einzigen Zeile:

'Hole "'

- Wie 'kn_umbr1.bat' ebenfalls ohne Zeilenumbruch am Ende.

Nun geht's los:

type kn_umbr2.bat>ZW.bat

type Inhalt.txt>>ZW.bat


Des weiteren sollten die Variablen dann mit End-" gesetzt werden:

echo set var1=%%1">Hole.bat 	statt
echo set var1=%%1>Hole.bat	bei 'kn_umbr1.bat'


[ !KEINE Leerzeichen jeweils vor dem '>'! Diese werden Teil der Variablen! ] 

 
Mit dieser Konstruktion wird die gesamte erste Zeile als Variable 1
erfasst, wenn auch in Anfhrungszeichen, welche von nun an mitgeschleppt
werden.

Mit der 'kn_umbr1.bat' - Konstruktion ohne Anfhrungszeichen wird 
dagegen jede Zeichenfolge in ersten Zeile als Variable erfasst, 
von %%1 bis %%9. 


Bei der Behandlung von Verzeichnissen spielt das jedoch keine Rolle.

[ Ohne Anfhrungszeichen wrde die Datei als Batch-Datei gelesen werden ]


> Siehe dazu: 		VERZEICHNISSE AUTOMATISCH LSCHEN
(weiter unten)



NB:

%0 (zum Setzen in Batch-Dateien %%0) = Ausfhrende Batch-Datei mit Pfad


ACHTUNG:

Das Folgende gilt NUR, falls die Batch-Datei im selben Verzeichnis liegt wie 
die zu behandelnde Datei - oder deren Dateipfad keine Leerzeichen aufweist.


[ Und da man nicht wei wie viele es sind, oder wie viele hintereinander (und 
mehrere Leerzeichen = ein Leerzeichen in DOS), kann man die Einzelteile auch 
nicht mit

%1%2%3%4%5%6%7%8%9 

o. . zsammenschwurbeln.


Alternativ: 

Die zu behandelnde Datei auf eine VERKNPFUNG zur Batch-Datei ziehen!

Dann aber wird mit TRUENAME und CD grundstzlich der Pfad der ausfhrenden 
Batch-Datei ausgegeben.

Will man den Pfad der zu behandelnden Datei ausgeben, vorher mit

cd %1\..

in deren Verzeichnis wechseln! 

Mit 

cd %0\.. 

geht es zurck ins Verzeichnis der Batch-Datei. ]



WEITER:


%1 (zum Setzen in Batch-Dateien %%1) = Behandelte Datei mit Pfad

dir %1 	   	wirft nur die behandelte Datei im dazugehrigen 
		Verzeichnis aus - alle anderen fehlen

dir %1 /B  	wirft nur den kompletten Namen der behandelten 
		Datei aus   	- mit Erweiterung
	   
dir %1 /B > x.txt 	gibt den kompletten Namen der behandelten 
			Datei als erste Zeile in die Textdatei 
			'x.txt' - Diese kann dann ausgelesen werden
	   
truename   	wirft den kompletten Pfad der behandelten Datei aus, 
		kurz 		- mit Tilden ~  [ Windows 9x ]
	   
cd   		wirft den kompletten Pfad der behandelten Datei aus, 
		lang 		- mit Leerzeichen
	   
cd > y.txt 	gibt den kompletten Pfad der behandelten Datei als
		erste Zeile in die Textdatei 'y.txt'
				- Diese kann dann ausgelesen werden
			

Den (auf 8 Zeichen verkrzten) DOS-Namen einer Datei allein auszulesen ist 
etwas komplizierter:

dir %1 | find ":" | find "Datentrger" /V | find "Verzeichnis von" /V >name.txt

[ Die auszuschlieenden Suchbegriffe mssen aus das System angepat werden ]

Das Ergebnis lautet beispielsweise:

  DIR     TXT            75  11.11.11  11:11 dir.txt

Und hieraus lassen sich mit Hilfe von der weiter oben beschriebenen Hilfs-Datei
'kn_umbr1.bat' (8.3) Name, Erweiterung, Gre, Datum, Uhrzeit, und Vollname
einer Datei auslesen. 


dir %1 | find "Verzeichnis von" > name.txt

Ergibt dagegen beispielsweise:

  Verzeichnis von C:\irgend etwas\irgendwo\Neuer_Ordner\Neuer Ord ner TEST

Dieses Ergebnis lt sich nur mit Programmen wie CHANGE verwerten, welche 
die Worte "Verzeichnis von" eliminieren knnen. 

Aber es geht: 


> Siehe dazu weiter unten: 		VERZEICHNISNAMEN AUSLESEN



! Will man den Vollnamen (Z.B. 'irgend_etwas.html') in Namen ("rootname") und
Erweiterung ("Extension") aufteilen, mu man den so extrahierten Vollnamen 
in eine vorlufige Textdatei schreiben lassen und mit Hilfe eines kleinen 
Extra-Programmes wie CHANGE.COM den trennenden Punkt in ein trennendes
Leerzeichen umwandeln - und diese so genderte Datei erneut auslesen.

Mit dieser Hilfe Punkt auf Leerzeichen (Standardtrennzeichen in DOS) ndern:

		CHANGE Variable.txt "." " "


Ergibt: 	'irgend_etwas html'


- Allerdings nur, wenn im Dateinamen weder Punkt noch Leerzeichen sind.



> Siehe dazu unten: 			ZEICHEN NDERN



Weitergehende Mglichkeiten liegen in der Verwendung von ALTER.EXE,
beispielsweise das ndern von Punkten in Zeilenumbrche, das Lschen
der letzen Zeile (mit der Erweiterung als Inhalt) und das anschlieende
wieder Zusammensetzen des Dateinamens ohne die Erweiterung. 

Viel Spa.


EXKURS Ende






ZEICHEN NDERN


Will man Texte im alten MS-DOS weiter behandeln und Zeichen, Worte und
Zeilen suchen und ersetzen, kann man dieses - hier bei Dateien bis etwa
30 kb Gre - mit einem Hilfsprogramm wie CHANGE.COM versuchen:

[http://www.Golden-Triangle.com/CHANGE.ZIP]

Allerdings vertrgt diese Programm keine Leerzeilen als Suchoption.


ALTER.EXE

[http://www-personal.umich.edu/~jaros/lib/win32/alter.exe]

von

[http://www-personal.umich.edu/~jaros/lib/win32/alter.htm]

schon eher, dieses dafr aber keine Umlaute.

Mit diesen lassen sich dann auch Textdateien Zeilenweise als Variable
auslesen, insbesondere wenn dafr gesorgt wird, da diese Programm-
vertrglich sind, d.h. weder Leerzeichen noch Umlaute oder Sonderzeichen
enthalten.


> Siehe dazu TU_ALTER.ZIP und TU_CHANGE.ZIP in

[http://www.erleuchtet.gmxhome.de/fw/win/dos-exen.zip]


> Beschrieben in

[http://www.erleuchtet.gmxhome.de/hilfe/dosmini1.htm]
und
[http://www.erleuchtet.gmxhome.de/fw/fw-index.htm]







VERZEICHNISNAMEN AUSLESEN

Folgende Zeilen als .BAT - Datei speichern:




@Echo Off

REM VERZEICHNISNAMEN AUSLESEN


REM Bentigt werden noch die Datei 'kn_umbr1.bat'
REM Bestehend aus der Zeile 'Hole '
REM - Ohne Umbruch, aber mit Leerzeichen am Ende!

REM Sowie ggf. die delay.com

REM VORLAUF

echo.
echo Hole das aktuelle Verzeichnis

CD > Dir.txt


REM HOLT Dir.txt

copy Dir.txt  Inhalt.txt >nul


echo.
echo Inhalt der Inhalt-Datei:
echo _
REM type Inhalt.txt
sort /R Inhalt.txt

echo.
echo -
echo Ende Inhalt der Eingabe
echo.

echo.
echo Der Vorlauf ist abgeschlossen
echo.

PAUSE



REM ----



REM Schreibe Zwischenlager ZW.bat

type kn_umbr1.bat>ZW.bat
REM Absoluter Pfad?

echo.
echo Holen der Variablen
echo.

PAUSE


REM Addieren der Variable zu Zwischenlager ZW.bat

REM 1 Variable = 1 Wort. Keine Leerzeichen.
REM MAXIMAL : echo set var1=%%1%%2%%3%%4%%5%%6%%7%%8%%9>Hole.bat
REM ODER : echo set var1=%%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9>Hole.bat

REM So knnen bis zu 9 Zeilenteile als Variable geholt werden
REM - Getrennt oder Zusammengefgt

REM Durch SORT Leerzeilen-Eingabefehler abfangen
REM /_R bewirkt: Leerzeilen nach unten.
REM Alphabetisch sortiert sind die Leerzeilen oben.

REM Sonst SORT ohne /_R oder TYPE

sort /R Inhalt.txt>>ZW.bat



REM Variablen holen:

echo.
echo Variablen werden gesetzt
echo.
echo Anzahl der Variablen: 1
echo.


REM Festlegen der gesuchten Variablen
echo set var1=%%1>Hole.bat

REM Holen derselben
call ZW.bat

PAUSE


REM PRFUNG: REM vor SET entfernen
REM set

echo.
echo Erkannte Variablen:
echo var1: '%var1%'
echo.

IF "%var1%"=="" echo. Variable 1 existiert nicht
IF "%var1%"=="" GOTO NEXT1

echo.

PAUSE


echo.
echo. Ausfuehrung
echo.

REM Eigentlich gehrt hier eine FOR-Schleife hin
REM Aber man kann mit den Variablen ja unterschiedliches anstellen

echo.
echo. Kopiere "%var1%" in AUSGABE.TXT
echo  Verzeichnis = %var1%. > Ausgabe.txt
echo. Inhalt von AUSGABE.TXT:
echo.
type Ausgabe.txt
echo.

:NEXT1

echo.

PAUSE


REM ABSCHLUSS

:ENDE

echo.
echo Ende
echo.

REM Beseitigt Zwischenergebnisse:

del Inhalt.txt
del Hole.bat
del ZW.bat


echo Schliesse in 10 Sekunden
delay 10

CLS





VERZEICHNISSE AUTOMATISCH LSCHEN



Folgende Zeilen als .BAT - Datei speichern:



@Echo Off

REM VERZEICHNISSE AUTOMATISCH LSCHEN


REM Bentigt werden noch die Datei 'kn_umbr1.bat'
REM Bestehend aus der Zeile 'Hole '
REM - Ohne Umbruch, aber mit Leerzeichen am Ende!

REM Sowie ggf. die delay.com


REM ACHTUNG:

REM KN_UMBR1.BAT listet nur Verzeichnisnamen ohne Leerzeichen korrekt
REM Mit KN_UMBR2.BAT werden auch Verzeichnisnamen mit Leerzeichen gelesen
REM Diese besteht aus der Zeile 'Hole "' ohne Umbruch am Ende
REM Des weiteren mssen die Variablen dann mit End-" gesetzt werden.


REM ACHTUNG:

REM Verzeichnisse werden im DOS samt Inhalt UNWIDERBRINGLICH gelscht!
REM Mit DELTREE ohne Nachfrage!

REM Rettung: Eine MS-DOS-Batch- Datei kann an den Haltepunkten mit der
REM Tastenkombination 'STRG + C' abgebrochen werden


REM ACHTUNG:

REM Wird diese Batch-Datei mit CALL von einer anderen aufgerufen, werden
REM Unterverzeichnisse im Verzeichnis der AUFRUFENDEN Datei gelscht!

REM In diesem Fall wo notwendig absolute Pfadangaben wie 'C:\...' machen.
REM Bzw. mit 'CD C:\...' in das zu subernde Verzeichnis wechseln


REM ACHTUNG:

REM Kopierte Verzeichnisse erhalten immer das aktuelle Datum!
REM Sie sind also ggf. die jngsten.

REM Man lernt...



REM VORLAUF


:BACK1



REM Zum Testen REM entfernen:
REM PAUSE
REM MKDIR "___AAA"


echo.
echo Liste das aktuelle Verzeichnis nach Datum
REM echo - nur Verzeichnisse


REM Vor dem gewnschten 'set' REM entfernen

REM D  Lscht im Ergebnis das lteste Verzeichnis zuerst
REM set WAHL=D

REM -D Lscht im Ergebnis das jngste Verzeichnis zuerst
set WAHL=-D


REM VERZEICHNIS EINLESEN

REM Ggf. enthaltendes Verzeichnis angeben

DIR /A:D /O:%WAHL% /B> Dir.txt


REM HOLT Dir.txt

copy Dir.txt  Inhalt.txt >nul

echo.
REM echo Inhalt der Eingabe:

IF NOT EXIST Inhalt.txt ECHO Keine Verzeichnisse gefunden
IF NOT EXIST Inhalt.txt GOTO ENDE1

echo _
type Inhalt.txt
REM sort /R Inhalt.txt

echo.
echo -
echo Ende Inhalt der Eingabe
echo.
echo. LOESCHT SICHERUNGEN
echo.
echo In der Loeschfolge

echo.
IF "%WAHL%"=="D" ECHO. AELTESTE ZUERST
IF "%WAHL%"=="-D" ECHO. JUENGSTE ZUERST
echo.


echo.
echo Der Vorlauf ist abgeschlossen
echo.

delay 3

REM PAUSE


REM Zum Testen REM entfernen:
REM GOTO NEXT1




REM ----



REM Schreibe ins Zwischenlager ZW.bat

type kn_umbr1.bat>ZW.bat
REM Absoluter Pfad?


REM Liste die Zahl der Verzeichnisse
DIR | FIND "Verzeichnis(se)" | FIND /V ":" >> ZW.bat



echo.
echo Holen der Variablen
echo.

PAUSE


REM Festlegen der gesuchten Variablen
echo set var1=%%1>Hole.bat

REM Holen derselben
call ZW.bat

echo.
echo.
echo Erkannte Variablen:
echo var1: '%var1%'
echo.

IF "%var1%"=="" echo. Variable 1 existiert nicht
IF "%var1%"=="" GOTO NEXT1

echo.

PAUSE

ECHO ERGEBNIS:



REM Prfung der Anzahl der angezeigten Verzeichnisse

REM Plus 0 im Stammverzeichnis: Ein Unterverzeichnis = 1
REM Plus 2 im Unterverzeichnis: Ein Unterverzeichnis = 3

REM Plus 2 im Unterverzeichnis: 4 Unterverzeichnis = 6



REM ----



	REM !!WICHTIG!!



	REM RESTANZAHL X DER VERZEICHNISSE SORGFLTIG EINSTELLEN

	REM LETZTER HALT VOR DER ZERSTRUNG

	REM UNBEDINGT VON 0 (2) BIS INKLUSIVE X+2 ALLE EINTRAGEN


	IF %var1%==0 GOTO NEXT1
	IF %var1%==1 GOTO NEXT1
	IF %var1%==2 GOTO NEXT1
	IF %var1%==3 GOTO NEXT1
	IF %var1%==4 GOTO NEXT1
	IF %var1%==5 GOTO NEXT1
	IF %var1%==6 GOTO NEXT1


	REM X und X+2 auch in NEXT1 eintragen

	echo.
	echo. Ausfuehrung
	echo.



REM ----



REM Eigentlich gehrt hier eine FOR-Schleife hin
REM Aber man kann mit den Variablen ja unterschiedliches anstellen



REM VERZEICHNISSE LSCHEN



REM Schreibe ins Zwischenlager ZW.bat

type kn_umbr2.bat>ZW.bat
REM Absoluter Pfad?

type Dir.txt >>ZW.bat


REM Festlegen der gesuchten Variablen
echo set var2=%%1">Hole.bat

REM Holen derselben
call ZW.bat

echo.
echo.
echo Zu loeschendes Verzeichnis:
echo var2: '%var2%'
echo.

IF "%var2%"=="" echo. Zu loeschendes Verzeichnis existiert nicht
IF "%var2%"=="" GOTO NEXT1


PAUSE

REM UND TSCHSS!

REM IF NOT "%var2%"=="" RMDIR %var2%
REM IF NOT "%var2%"=="" DELTREE %var2%


REM OHNE NACHFRAGE!



IF NOT "%var2%"=="" DELTREE /Y %var2%


echo.
IF Errorlevel 1 echo. Verzeichnis '%var2%' NICHT geloescht!
IF Errorlevel 0 echo. Verzeichnis '%var2%' GELOESCHT!
echo.

IF NOT "%var2%"=="" GOTO BACK1


PAUSE



:NEXT1

echo.

IF %var1%==6 ECHO Noch 4 Unterverzeichnisse vorhanden

ECHO Keine zu loeschendenden Unterverzeichnisse
echo.

delay 3


REM PAUSE

REM ABSCHLUSS



:ENDE1


echo.
echo Ende
echo.

REM Beseitigt Zwischenergebnisse:

del Dir.txt
del Inhalt.txt
del Hole.bat
del ZW.bat


echo Schliesse in 10 Sekunden
delay 10

REM vor CLS entfernen
CLS







Hinrichs 2009 /erg 2011
