[DOS - Menü aufrufen]
DOS

DOS Allgemein





        

VERZEICHNISWECHSEL IN DOS


Aus dem Netz:


[ aus Wikibooks.orgSie verlassen diese
              Seiten ]



RELATIVE PFAD-ANGABEN IN DOS:



ABSOLUTE PFAD-ANGABEN IN DOS



VERZEICHNIS ALPHABETISCH GEORDNET SEITENWEISE ANZEIGEN IN DOS

DIR /O/P



VERZEICHNIS MIT KURZEN 8.3 NAMEN ANZEIGEN IN DOS

DIR /X




DIR /X eignet sich beispielsweise hervorragend, um Dateien umzubenennen.

  

Anwendungsbeispiel

in WINDOWS 7 ]



FEHLER:

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



FEHLERBEHEBUNG:

  1. Das Verzeichnis mit dem ungültigen Namen leeren

  2. In Start/ Ausführen oder Start/ "Programme/Dateien durchsuchen"

    "CMD"

    eingeben und die DOS-Box öffnen

  3. In der DOS-Box in das Verzeichnis wechseln, das den ungültig benannten Ordner enthält, und dort

    DIR /AD /X

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

  4. Diesen Namen zur weiteren Behandlung benutzen, also beispielsweise den Ordner umbenennen:

    REN XXX~1 NeuerName


    oder löschen:

    RD XXX~1



    Das war's.




     

DOS in WINDOWS

Einlesen, Auslesen Und Ausgeben als Variable in DOS von Textteilen: Verzeichnispfaden, Datum, Zeit etc.


 -> In Windows XP und höher ist DOS ( dort: mit CMD.EXE ) in der DOS-Box 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 anschließend weiter verarbeiteten kann.


 -> Im alten DOS unter Windows 9x ist das nur über Umwege möglich. Diese werden hier beschreiben.



Man muß in Windows 9x sich beispielsweise bei


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


damit begnügen, deren Ausgabe in eine Textdatei schreiben zu lassen.


CD > XYZ.TXT
TRUENAME > XYZ.TXT


[ Dabei schreibt CD in die erste Zeile, TRUENAME - gilt nur bis Windows 9x - in die zweite; dieses gibt es bei der Auswahl der Variablen zu beachten. Ggf. mit SORT /R die Leerzeile nach unten verschieben! ]


Diese Textdatei müßte dann zur Weiterverarbeitung unter Zuhilfenahme von temporären Dateien in DOS ausgelesen und einzelne Zeilen als Variable gespeichert werden. [ Ggf. mit FIND die Zeile ausfindig machen ]


-> Einige Möglichkeiten werden hier dargestellt. Sie befinden sich aktualisiert zum Herunterladen in:

COPYDAT.zip download now und  EINGABE.zip download now

zu finden hier und im Freeware-Index.




Anmerkung
:


Das alte MS-DOS ist vom Speicher her begrenzt, was die beispielsweise Zeichenanzahl in Dateipfaden, Verzeichnistiefe etc. angeht. Das gilt insbesondere für

Batch-Dateien



Beschrieben hier und im Freeware-Index.




  

DOS-BATCH-Dateien

1999 / erg 2011



Ausführbare Dateien in DOS bis Windows 7:

Im Grunde handelt es sich bei BATCH - Dateien ( Endung: .BAT ) um kleine selbstgeschriebene Programme, die bestimmte Aufgaben erfüllen und aufeinander aufbauen können. Eine Handvoll Befehle, die man selbst in eine Textdatei mit der Endung: .BAT schreibt, reichen dazu aus.

Diese Befehle sind in der DOS-Box mit der Eingabe "HELP" zu finden. Die Syntax der einzelnen Befehle dann unter "BEFEHL /?"

  

EINZELNE ZEILEN FINDEN IN DOS

Beispiel: In DOS Verzeichnisse auslesen


 




Zum Ausprobieren:


Die folgenden Zeilen in eine Batch-Datei mit dem Namen

"AKTDAT.BAT"

kopieren, um diese sich selbst finden zu lassen:

( In einem möglichst 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 ERGÄNZEN


Hier ein Beispiel, wie man über Zwischendateien Dateinamen mit aktuellem Datum ergänzen kann,

beispielsweise die Datei

FOTO.JPG

als

FOTO_*DATUM*.JPG

umbenennen:


----


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.


Erklärung:


  1. Die erste Zeile wirft beispielsweise in die erste Zeile von 'datum.bat'

    Aktuelles Datum: Di, 11.11.2011

    aus.

  2. Die zweite Zeile wirft in die erste Zeile von 'aktuelles.bat' set

    DATUM=%3%4

    aus.

  3. Die dritte Zeile ruft nun mit

    datum.bat


    in etwa folgendes ab:

    setze (Variable) DATUM=%3 für Datum: Di, 11.11.2011

    - Weil "Aktuelles" in Zeile 1

    als Befehl gelesen die Datei 'aktuelles.bat' aktiviert

    [ %1 wäre 'Datum:' ; %2 wäre 'Di' . ]




     

DOS - VERZEICHNIS AUSGEBEN



EXKURS 1:

Aus dem Netz:

[ von Dosware.deSie verlassen diese
              Seiten ]


Wechsel ins Verzeichnis der laufenden Batch-Datei

Oftmals ist es wichtig, dass beim Start einer Batch-Datei ein bestimmtes Verzeichnis geöffnet ist, damit z.B. relative Pfadangaben in der Batch- Datei funktionieren o.ä.

Die Variable %0 liefert den vollständigen 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


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 für 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.



EXKURS 1 Ende




Anmerkung:


Auf diese Weise kann man nach einer bestimmten Datei in einem DOS - PATH suchen lassen, egal wo die aufrufende Batch-Datei sich befindet. Die Schleife muß ggf. jedes Mal vor Aufruf der Datei durchlaufen werden.

Alternativ: mit absolutem Pfad ansprechen (wenn dieser bekannt ist).




     

DATEI-EIGENSCHAFTEN ALS VARIABLE SPEICHERN



Als Beispiel
:


Eine Batch-Datei, die das aktuelle Verzeichnis



  

EXKURS 2: Textdateien zeilenweise auslesen

 


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! ]


 -> Siehe dazu: Verzeichnisse automatisch löschen



NB:


%0   = Ausführende Batch-Datei mit Pfad

(zum Setzen in Batch-Dateien: %%0)


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 VERKNÜPFUNG zur Batch-Datei ziehen! Dann aber wird mit TRUENAME - gilt nur bis Windows 9x - und CD grundsätzlich der Pfad der ausführenden 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 zurück ins Verzeichnis der Batch-Datei. ]




WEITER:

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


dir %1 	   	wirft nur die behandelte Datei im dazugehörigen
		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 ~  [ Nur bis 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


Achtung:

Dieses Vorgehen mit TRUENAME gilt in Windows 9x / in dieser Anwendung später nicht mehr.

Die andern Befehle gelten weiterhin.  



Dieses Ergebnis läßt sich nur mit Programmen wie CHANGE verwerten, welche die Worte "Verzeichnis von" eliminieren können.


Aber es geht:

 -> Siehe dazu: Verzeichnisnamen auslesen



Viel Spaß.


EXKURS 2 Ende




     

EINIGE BEISPIELE für Batch - Dateien:

 
x.bat   Schließt das DOS - Fenster mit einem Befehl
treep.bat   Schreibt den Verzeichnisbaum in eine Datei in C:\ (Windows 3.x)
dirp.bat   Schreibt das Verzeichnis in eine Datei in C:\ mit der Endung "TXT"
dirpd.bat   Schreibt das Verzeichnis in eine Datei in C:\ mit der Endung "DOC"
treepdir.bat   Schreibt Verzeichnis und Baum in zwei Dateien in das Verzeichnis, das ausgelesen wurde
no.bat, txt.bat, mdr.bat   Schreiben Verzeichnisse und Text-Dateien mit vorgefertigten Namen; Nützlich mit Shell-Erweiterungen.
    Erläuterungen dazu und weitere Möglichkeiten )
 
cleantmp.bat   Entleert die Verzeichnisse C\TEMP und C\WINDOWS\TEMP - auch bei laufendem Windows - Betrieb
     
Weitere Batch-Dateien befinden sich hier und hier





     

VERZEICHNISNAMEN AUSLESEN


Zum Umbenennen von Dateien


Es kommt vor, daß es in mehrere Unterverzeichnissen etliche Dateien mit dem gleichen Namen gibt, beispielsweise wenn man Audio - CDs extrahiert hat, und die Dateien alle mit dem Namen Track 1.mp3 - Track 22.mp3 belegt sind, aber in unterschiedlichen Verzeichnissen, die sinnvollerweise den Namen der CD tragen. Um diese Dateien anders zusammenfassen zu können, müssen sie erst einmal unterschiedlich benannt werden - am besten mit dem Namen des jeweiligen Verzeichnisses.

Das läßt sich in DOS bewerkstelligen:


Mit der Eingabe

for %* in (.) do echo VZ: %~nx*


in die DOS-Box wird das jeweilige Verzeichnis angezeigt. In einer Batch- datei lautet der Befehl entsprechend:

for %%* in (.) do echo VZ: %%~nx*


- Aber nur das jeweilige, ohne die Unterverzeichnisse. Mit der Eingabe

for /R %* in (.) do echo VZ: %~nx*

bzw. für die Batchdatei:

for /R %%* in (.) do echo VZ: %%~nx*

werden auch die Unterverzeichnisse angezeigt.



-> Nun müssen noch die entsprechenden Dateien erfasst und umbenannt werden. Hier lautet die Vorgabe: Alle Dateien, die auf "test" beginnen und auf .TXT enden: "test*.txt"

Dazu folgendes in die DOS-Box eintragen:


Ohne Unterverzeichnisse:


For /F %i in ("test*.txt") do set Datei%i=%~nxi & CD %~dpi & for %* in (.) do ren "%~nxi" "%~nx*_%~nxi"


Mit Unterverzeichnissen:


For /R %i in ("test*.txt") do set Datei%i=%~nxi & CD %~dpi & for %* in (.) do ren "%~nxi" "%~nx*_%~nxi" & cd ..


Mit Unterverzeichnissen in einer Batch - Datei:


@ECHO OFF

REM Liest den Ordnernamen REKURSIV aus und setzt ihn (mit Unterstrich_) 
REM vor alle Dateien, die mit "test" beginnen (MIT Unter-Verzeichnissen)

SET MASKE="test*.txt"

REM Liest den Verzeichnis-Namen aus:
ECHO.

for /R %%* in (.) do echo VZ: %%~nx*
ECHO.

For /R %%i in (%MASKE%) do set Datei%%i=%%~nxi & CD %%~dpi & for %%* in (.) do ren "%%~nxi"  "%%~nx*_%%~nxi" & CD ..

CD %0\..


-> mit CD.. wird wieder in das Ursprungsverzeichnis versetzt - allerdings in das übergeordnete; deshalb der Zusatz  CD %0\.. in der Batch - Datei


-> Wenn man es nur testen will, ECHO vor REN einfügen.





Zum Weiterbearbeiten


Folgende Zeilen als .BAT - Datei speichern:





@Echo Off
REM VERZEICHNISNAMEN AUSLESEN

REM Benötigt 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 können bis zu 9 Zeilenteile als Variable geholt werden
REM - Getrennt oder Zusammengefügt
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 PRÜFUNG: 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 gehört 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 in DOS AUTOMATISCH LÖSCHEN

Sicherungen und Aufräumarbeiten in DOS


Wenn Windows startet, gibt es etliche Sicherungen, die durchzuführen sind; auf der anderen Seite müssen Sicherungsdateien regelmäßig gelöscht werden: Am besten die jeweils ältesten. Zudem können manche Prozesse beendet werden, die nur Speicherplatz blockieren, und Änderungen an der Registry zurückgenommen.

'Abgleich und Aufräum' - Batchdateien werden:

entweder im AUTOSTART angesprochen, nach dem Starten von Windows,
kann aber auch (in Win 98) in der Autoexec.bat angesprochen werden
dann öffnet kein Extrafenster; und nur mit kurzen 8.3 Dateinamen
Dafür werden die Änderungen auch bei in Windows abgebrochener Routine durchgeführt - eben VOR Windows.
Deshalb können da auch Sicherungsdateien wie die SWAP-Datei gelöscht werden, auf die nach dem Windows-Start kein Zugriff mehr besteht
Zum Schluß wird mit C:\WINDOWS\WIN.COM Windows gestartet

Anderseits kann, wenn die Batch-Datei erst nach dem Windows-Start angeworfen wird, in Prozesse eingegriffen werden, die dann schon abgeschlossen sind und korrigiert werden sollen.

Am besten ist es, eine oder zwei Start-Batch-Dateien zu erstellen, welche verschiedene Batch-Dateien nacheinander mit


CALL C:\IRGENDWO\NAECHSTE.BAT


aufrufen; diese lassen sich dann leichter ändern.



Einzelne Batchdateien:

  1. Killt Prozesse, um Speicher frei zu machen. Beispielsweise mit Kill.exe, oder TASKKILL bzw. KILLtask.exe - je nach Betriebssystem und benutzter Software. Näheres hier

    C:\irgendwo\kill_etwas.bat


    Darin:

    
    killtask Irgendwas.exe
    killtask IrgendwasAnderes.exe
    REM kill /f Mist.exe
    
    ...
    


  2. Kopiert Dateien, um sie zu sichern - oder um wie hier eine Sicherung zurückzuspielen, um einen bestimmten Stand in Windows immer wieder zu erzwingen:

    C:\irgendwo\copy_etwas.bat


    ('Delay' ist eine Verzögerungsfunktion von DELAY.COM; es gibt auch Andere)


    Darin:

    
    if not exist "C:\gesichert\irgendwas.ini" GOTO fehler
    copy "C:\gesichert\irgendwas.ini" "C:\WINDOWS\irgendwas.ini"
    
    ...
    
    REM Wenn Alles gut geht:
    GOTO ende
    
    REM Wenn nicht:
    :fehler
    
    Echo.
    ECHO FEHLER!!
    Echo Es trat ein Fehler auf. Eine oder mehrere Dateien wurden
    Echo moeglicherweise nicht gefunden.
    Echo Das Programm wurde an dieser Stelle angehalten.
    Echo Es wurden nicht alle Backups erstellt.
    Echo.
    
    exit
    
    Rem Umgehungsziel und Ende:
    :ende
    
    echo.
    echo Operation beendet.
    echo.
    echo Ende.
    echo.
    
    delay 3
    echo.
    
    :close
    
    delay 3
    echo.
    echo Bitte Fenster schliessen.
    
    REM Hier cls
    CLS
    


  3. Entfernt in der Registry beispielsweise hartnäckige, unerwünschte "Neue..." - Einträge im Explorer-Kontextmenü, die sonst nicht wegzukriegen sind:

    regedit /s "C:\gesichert\Neue_Datei_weg.reg"


  4. Löscht einzelne Dateien oder ganze Verzeichnisse, wie in C:\WINDOWS\TEMP

    
    @ECHO OFF
    
    echo.
    echo Vorgang: Dateien loeschen
    echo.
    echo Loescht vorbestimmte Temporaere Dateien in WINDOWS und WINDOWS\TEMP
    echo.
    echo.
    echo BESTAETIGUNG:
    
    choice /c:jn /t:j,7 Soll dieser Vorgang in 7 Sekunden begonnen werden?
    if errorlevel 2 goto ende
    
    echo.
    echo ABBRECHEN:
    echo Fenster mit der MAUS! schliessen oder Vorgang mit STRG + C unterbrechen
    echo.
    
    delay 10
    
    Rem echo Ansonsten:
    ECHO.
    ECHO Loescht *.tmp - Dateien in WINDOWS und WINDOWS\TEMP
    
    delay 5
    
    Del C:\WINDOWS\*.tmp
    Del C:\WINDOWS\TEMP\*.tmp
    
    echo.
    ECHO Loescht ~*.* - Dateien in WINDOWS und WINDOWS\TEMP
    
    delay 5
    
    Del C:\WINDOWS\~*.*
    Del C:\WINDOWS\TEMP\~*.*
    
    delay 5
    
    ECHO ENDE
    
    delay 5
    :ende
    
    REM CLS
    CLS
    
    
    





Folgende Zeilen als .BAT - Datei speichern:

[ Oder das Ganze hier Aufrufen; befindet sich auch in der Sammlung Alledos ]





@Echo Off
REM VERZEICHNISSE in DOS AUTOMATISCH LÖSCHEN

REM Benötigt 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 müssen die Variablen dann mit End-" gesetzt werden.

REM ACHTUNG:
REM Verzeichnisse werden im DOS samt Inhalt UNWIDERBRINGLICH gelöscht!
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 gelöscht!
REM In diesem Fall wo notwendig absolute Pfadangaben wie 'C:\...' machen.
REM Bzw. mit 'CD C:\...' in das zu säubernde Verzeichnis wechseln

REM ACHTUNG:
REM Kopierte Verzeichnisse erhalten immer das aktuelle Datum!
REM Sie sind also ggf. die jüngsten.
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 gewünschten 'set' REM entfernen
REM D  Löscht im Ergebnis das älteste Verzeichnis zuerst
REM set WAHL=D
REM -D Löscht im Ergebnis das jüngste 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 Prüfung 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 SORGFÄLTIG EINSTELLEN
	REM LETZTER HALT VOR DER ZERSTÖRUNG
	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 gehört hier eine FOR-Schleife hin
REM Aber man kann mit den Variablen ja unterschiedliches anstellen

REM VERZEICHNISSE LÖSCHEN

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 TSCHÜSS!
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






    

Die besondere Datei:

  

Die AUTOEXEC.BAT

 



Achtung
:


Da in diesem Fall Windows noch nicht geladen wurde, müssen alle Datei - und Verzeichnisnamen nach dem 6. Buchstaben mit '~1', bei mehreren Dateien mit den gleichen ersten 6 Buchstaben mit '~1', '~2', '~3' usw. abgeregelt werden.

Leichter ist es, eine Verknüpfung mit der BACKUP.BAT in den Autostart - Ordner von Windows abzulegen. Beendet man sie mit 'EXIT', bleibt das Fenster zur Kontrolle der Ergebnisse geöffnet.


 -> Mit dem Befehl 'CLS' nach 'EXIT' wird das DOS - Fenster in Windows automatisch geschlossen - manchmal auch schon durch 'EXIT'. Allerdings sollte man darauf achten, daß dieser Befehl wirklich die letzte Zeile der Batch-Datei ist - ohne weitere Leerzeile.


 -> Setzt man mit der rechten Maustaste in der Verknüpfung in "Eigenschaften" "Ausführen" auf "minimiert", dann geschieht die Ausführung der Batch- Datei unbemerkt. "Beim Beenden schließen" schließt das Fenster nach der Ausführung.

 


     

Kopieren von Verzeichnissen und Dateien:

 

        XCOPY /S C: D:

bildet man das ganze Laufwerk C mitsamt allen Unterverzeichnissen auf D ab, wenn vorhanden. Allerdings gehen dabei die langen Dateinamen verloren.

( Tip: KSDSie verlassen diese
              Seiten )

        XCOPY  "C:\...Quellverzeichnis"  "D:\...Zielverzeichnis" /F/C/D/I/H/K/S/-Y

wird die Quelle mit allen Unterverzeichnissen und der Nachfrage, ob vorhandene Dateien überschrieben werden sollen, in das Ziel kopiert ( /Y ohne - : ohne Nachfrage ). Die Anführungszeichen verhindern Fehler bei Leerzeichen in langen Dateinamen.

( Tip: PC WeltSie verlassen diese Seiten )

        echo d | Xcopy "C:\Quellverzeichnis\irgendwas.zip" "D:\Zielverzeichnis\irgendwas.zip"/K/D/Y/H

        echo d | Xcopy "C:\Quellverzeichnis2\nochwas.zip" "D:\Zielverzeichnis2\nochwas.zip"/K/D/Y/H

        ... usw


 -> Achtung: Umlaute in den Dateinamen müssen mit einem "?" maskiert werden! Bei Umlauten im Pfad hilft allerdings auch das nicht, da muß umfangreicher abgeholfen werden.



- echo d | beantwortet die Nachfrage, um was es sich handelt, mit "Datei"

- /K beläßt ggf. das "schreibgeschützt"- Attribut

- /D prüft, ob die Quelldatei neueren Datums ist ( spezifische Datumsangaben sind auch möglich )

- /Y unterdrückt die Nachfrage, ob eine ( ältere! ) Zieldatei überschrieben werden soll

- /H kopiert auch System - und versteckte Dateien ( optional )

- /R überschreibt auch schreibgeschützte Dateien ( optional )

 -> Will man zudem noch wissen, ob die entsprechende Datei sich von ihrer Kopie unterscheidet - ob die beiden Dateien identisch sind ob oder nicht - und zwar unabhängig davon, ob sie danach überschreiben wurden, kann man vor diese Zeile jeweils noch zwei weitere einfügen:

 

      echo n | comp /L "C:\Quellverzeichnis\irgendwas.zip" "D: \Zielverzeichnis\irgendwas.zip" 2> NUL
      if errorlevel 1 Echo Die Dateien sind NICHT IDENTISCH!

      echo d | Xcopy "C:\Quellverzeichnis\irgendwas.zip" "D: \Zielverzeichnis\irgendwas.zip"/K/D/Y/H


      ... usw



- /L wirft Unterschiede bei gleich großen Dateien mit der zugehörigen Zeilennummer aus

- '2> NUL' unterdrückt die DOS - Nachfrage: 'Weitere Dateien vergleichen (J/N) ?'

- echo n | beantwortet diese Nachfrage automatisch mit "Nein"


 -> Auf diese Weise wird auch noch eine vernünftige Meldung ausgeworfen, so daß man an den Anfang der Batch - Datei


@ Echo Off


setzen kann.



 -> Die Meldung lautet dann ( bei unterschiedlich großen Dateien ):


Vergleichen von C:\...\Quellverzeichnis\neu.txt und D:\...\Zielverzeichnis\alt.txt... Dateien sind unterschiedlich groß. Nachricht: >> Die Dateien sind NICHT IDENTISCH! ------------------ C:\...\Quellverzeichnis\neu.txt 17.01.2016 13:29 49 alt.txt D:\...\Zielverzeichnis\alt.txt 17.01.2016 13:30 32 neu.txt >> Die Zieldatei ist NEUER! 0 Datei(en) kopiert

-------------

/ falls die zweite Datei neuer ist, bzw.

1 Datei(en) kopiert

/ falls sie älter war ( jetzt nicht mehr )


Auf diese Weise braucht man nur eine Batch - Datei für beide Zwecke:

Falls die Datei im Zielverzeichnis älter ist, wird sie ohne Nachfrage überschrieben, falls sie neuer, also jüngeren Datums ist, nicht. In beiden Fällen aber wird gemeldet, ob sich die Dateien unterscheiden - oder nicht.

Diese Dateien kann man dann manuell vergleichen und ggf. überschreiben ( letzteres ginge natürlich auch automatisch, mit einer entsprechenden Befehlszeile in die andere Richtung ). Man kann auch mit ">> liste .txt" eine Liste aller unterschiedlichen Dateien erstellen lassen.


Das Gesamtkunstwerk gibt es hier als Text und erweitert in der Sammlung Alledos ( neue Version )

- mit folgenden kleinen Raffinessen:


Das DOS-Script prüft, ob ein Dateipfad Leerzeichen enthält, und gibt eine entsprechende Fehlermeldung aus; es erlaubt Umlaute im Dateipfad und unterdrückt die Meldung; es unterdrückt die Ausgabemeldung von COMP, maskiert die Eingabe N von ECHO N |, leitet die Ausgabe- und Fehlermeldung von XCOPY in eine Variable um und ruft beide Variablen über eine temporäre Datei wechselweise ab und wertet sie aus.

Das Ergebnis wird sowohl auf den Bildschirm wie auch in einer Datei ausgegeben, wobei die Dateien aus den Verzeichnissen mit Datum und Größe angezeigt werden.

  

Aus der DOS-Hilfe von Windows:



Nachtrag: Nul


Der Befehl 'nul' ist in DOS auch anderweitig nützlich, man kann damit (blockierte) leere Verzeichnisse und Dateien erstellen und / oder diese leer überschreiben, um beispielsweise bestimmte Dateien immer wieder auf null zu setzen:


Eine Datei blockieren:

	Copy nul blockiert.txt
	REM Setzt die Datei auf 'schreibgeschützt':
	attrib +r blockiert.txt



Ein Verzeichnis namens "Cache" erstellen und blockieren:

	Copy nul Cache
	REM Setzt die Datei auf 'schreibgeschützt':
	attrib +r Cache


(Das erstellt zwar kein wirkliches Verzeichnis, sondern eine Datei; Windows kann aber kein Verzeichnis mit demselben Namen dort mehr erstellen.)


  

Platzhalter:



Kopieren läßt sich auch mit Batch-Dateien:

    	@echo off
	dir *.txt
	echo %0

	copy /y/b/v *.txt alle.txt


Diese Batch-Datei faßt bei Ausführung alle Text-Dateien mit der Endung '.TXT' in alphabetischer Reihenfolge in einer einzigen namens "ALLE.TXT" zusammen, läßt die Originale aber bestehen - auch bei mehrfacher Ausführung. Neue Dateien werden neu mit hineinkopiert, entfernte wieder herausgenommen


Die folgende löscht die Originale nach der Ausführung. Da sie nun nicht mehr existieren, bleiben sie in ALLE.TXT erhalten; neue Dateien werden unten angefügt.

	@ECHO OFF
	DIR *.TXT
	ECHO %0

	REN ALLE.TXT ALLE._XT

	COPY /Y/B/V ALLE._XT + *.TXT ALLE.XXT
	DEL ALLE._XT

	REM ORIGINALE LÖSCHEN
	DEL *.TXT

	REN ALLE.XXT ALLE.TXT



( Für weitere Copy - Funktionen: Die DOS-Hilfe öffnen. )    

->"%" Zeigt in DOS - Batch-Dateien Platzhalter an, wobei %0 das augenblickliche Verzeichnis anzeigt, und falls sie angesprochen wird, %1 die laufende Datei.


Mit einer Batch - Datei lassen sich auch einzelne Textdateien zu einer im selben Verzeichnis befindlichen Datei namens "alle.txt" hinzufügen:

 
	@echo off
	copy /y/b/v alle.txt + %1 alle.txt
	del %1 rem Löschen


Diese Batchdatei wird über "Dateitypen" dem Kontextmenü für .TXT - Dateien hinzugefügt. ( Tip: PC WeltSie verlassen diese Seiten )


PS: In WORD läßt sich Ähnliches mit ausgesuchten Dateien mit Hilfe der Makros W6ALLIN1 / W7ALLIN1 durchführen ]



Als weiteres Beispiel für eine nützliche kleine Batch - Datei wird folgendes genannt:

	@echo off
	if not exist %1 md %1
	cd %1


Bedeutet:


Wenn das eingetippte Verzeichnis nicht existiert, erstelle es; wenn doch, öffne es ( '%1' stellt den Platzhalter ).


Allerdings ist es in Windows 9x nicht leicht, eine Benutzer-Eingabe in DOS zu erreichen.


Es geht, wenn auch umständlich, mit folgenden Befehl:


     

CHOICE:


Ein Wahl oder Befehlsumgehung wird in Windows 9x erreicht mit "CHOICE":

    @echo off
    echo.
    Fuehre jetzt den Befehl aus.
    echo.
    choice soll ich?
    If errorlevel 2 goto nein

    echo.
    echo Operation beginnt...
    echo.
    [AUSZUFÜHRENDER DOS-BEFEHL]
    echo Operation beendet. Bitte Fenster schliessen.
    exit

    :nein
    echo.
    echo Operation abgebrochen. Bitte Fenster schliessen.
    exit



Erläuterung:

Gibt [JN] als Auswahl. Ein 'N' umgeht den Befehl und springt zu angegebenen Marke, in diesem Fall ':nein'.

Ein 'J' läßt den Befehl ausführen. 'Echo.' erzeugt im DOS einen Zeilenumbruch bzw. optisch eine Leerzeile ( igentlich eine simulierte Eingabe ).


In höheren Windows - Versionen existiert CHOICE.COM nicht mehr, läßt sich aber aus Windows 9x kopieren oder durch REPLY.COM ersetzen - kompiliert nach Microsoft - VorschriftSie verlassen
          diese Seiten und zu finden hier in der DOS-Exen.zip und hier als Reply.zip download now.


Der CHOICE - Befehl läßt sich in Windows 98 dazu mißbrauchen, im DOS den Dateinamen ( mit und ohne Pfad ) sowie die Datei-Erweiterung zu bestimmen - wenn auch im 8.3-Format.

Ein Beispiel gibt es hier in der CopyDat.zip. Des weiteren kann man damit Programm - Ausgaben aus Textzeilen als Variable einlesen, oder wie hier in Eingabe.zip gezeigt, in laufende DOS - Vorgänge Text eingeben. Des Weiteren kann man damit wie hier in DOS - Abläufe Verzögerungen einbauen. ( Alle Anwendungsbeispiele sind enthalten in der DOS-Exen.zip )

Damit läßt sich u. a. der Dateinamen mit dem aktuellen Datum versehen. ( In höheren Windows - Versionen gibt es dafür im DOS, soweit überhaupt noch vorhanden und notwendig, andere Möglichkeiten )

     

Weitere DOS -Befehle:


 -> Einige weitere Einstellungen auf der DOS - Ebene von Unbekannt für Windows 98 SE et al befinden sich hier

 -> Eine Übersicht über alle DOS - Befehle und deren Anwendung erhält man, indem man an der DOS - Eingabeaufforderung "HELP" oder z. B. "HELP DIR" eintippt. ( Dazu müssen allerdings die Dateien QBASIC.EXE, QBASIC.HLP, HELP.HLP, und HELP.COM im DOS - Verzeichnis vorhanden sein. )


Alternativ:

Der Schalter /? nach einem Befehl wie "DATE" z. B. zeigt mögliche Optionen an - allerdings nur rudimentär. Und SEHR GEFÄHRLICH bei manchen Schreibfehlern - der Befehl wird unwiderruflich ausgeführt!

 -> DOS - Anwendungen laufen im allgemeinen sehr schnell durch. Manchmal möchte man jedoch eine Batch - Datei kurz anhalten, entweder um dem Anwender Zeit zu geben, eine Meldung zu lesen, oder um eine Ja / Nein Entscheidung abzufragen.

In beiden Fällen leisten kleine DOS - Programme von Siegfried Weckmann gute Dienste, die man in den DOS - Ablauf einbinden kann, ähnlich wie DELAY: PASS und JN-FRAGE. Sie erlauben eine zeitlich begrenzte Abfrage, was nun geschehen soll.

 ->Zeitlich unbegrenzte Pausen erzeugt der Befehl PAUSE - danach geht es "Weiter mit beliebiger Taste . . ."   [ Das Gleiche bewirkt übrigens das Drücken der Taste  [ Pause ]  ; mit ihr kann man jede in einem offenen Fenster ablaufende Batch - Datei unterbrechen. Ganz abgebrochen wird eine laufende Batch - Datei mit [ Strg ] + [ C
          ] ]

 ->Programmaufruf: Manche DOS - Befehle sind gar keine; wenn man den Namen eines in einem dem System bekannten Pfad liegenden Programm ( oder das Programm mit Pfadangabe ) einträgt, wird dieses Programm geöffnet; ggf. mit Parametern. Dabei ist der Zusatz wie '.EXE' nicht notwendig: PROGRAMM statt PROGRAMM.EXE genügt.





     

Suchen und Ersetzen:


In DOS Textdateien bearbeiten und auswerten:


Grundsätzlich läßt sich im DOS unter Windows 9x keine Suchen / Ersetzen - Funktion durchführen ( und in höheren Versionen ist es auch nicht gerade einfach ). Das erledigen jedoch - mit Einschränkungen - diese ebenso kleinen wie vielseitigen Programme - auch per Batchdatei ( und auch in XP ):

     

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 Größe - mit einem Hilfsprogramm wie

CHANGE.COM

versuchen - allerdings verträgt diese Programm keine Leerzeilen als Suchoption.

ALTER.EXE

schon eher, dieses dafür aber keine Umlaute.


Mit diesen lassen sich dann auch Textdateien Zeilenweise als Variable auslesen, insbesondere wenn dafür gesorgt wird, daß diese Programm- verträglich sind, d.h. weder Leerzeichen noch Umlaute oder Sonderzeichen enthalten.  

-> Siehe dazu TU_ALTER.ZIP und TU_CHANGE.ZIP in der DOS-Exen.zip download now

Beschrieben hier und im Freeware-Index.


Doch auch ohne diese DOS-Erweiterungen kann man mit Bordmitteln eine Menge erreichen.
     

ALTER.EXE download now von Lincoln '32-bit' JarosSie verlassen diese
          Seiten ; dort gibt es noch weitere nützliche DOS - ProgrammeSie verlassen diese Seiten ( englisch ).

Alternativ:

CHANGE.COM download now

Beide zu finden in der DOS-Exen.zip - Sammlung hier.


 -> Für Windows selbst gibt es genau so zwei verschiedene Möglichkeiten Suche & Ersetze - Operationen in Dateien durchzuführen:





JHR 2011 / erg 2013






Weiterführend:

DOS - Data Operating System

Weitere Batch-Dateien gibt es

hier und im Freeware-Bereich  





ZU1 SeiteRÜCK
© 1999 Jürgen Hinrichs

http://www.erleuchtet.gmxhome.de/index-g.htm



  Stichwortsuche:  

 Wie suche ich richtig mit FreeFind?

Suchbegriff(e) bitte EXAKT eingeben; ggf. mit Platzhalter abkürzen:
formatieren findet nur formatieren; format* findet auch Formate, Formatierung, etc.


     Von FreeFind
     Inhaltsverzeichnis