Aus dem Netz:
[ aus
Wikibooks.org ]
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.
[ in WINDOWS 7 ]
FEHLER:
Ein Ordnernamen hat durch einen Fehler Leerzeichen am Ende erhalten: [XXX ] Statt [XXX]
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 und EINGABE.zipzu finden hier und im Freeware-Index.
Das alte MS-DOS ist vom Speicher her begrenzt, was die beispielsweise
Zeichenanzahl in Dateipfaden, Verzeichnistiefe etc. angeht. Das gilt insbesondere
für
Beschrieben hier und im
Freeware-Index.
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 /?"
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
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:
EXKURS 1:
Aus dem Netz:
[ von
Dosware.de ]
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).
Eine Batch-Datei, die das aktuelle Verzeichnis
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. ]
%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
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 |
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.
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
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:
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:
C:\irgendwo\kill_etwas.bat
Darin:
killtask Irgendwas.exe killtask IrgendwasAnderes.exe REM kill /f Mist.exe ...
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
regedit /s "C:\gesichert\Neue_Datei_weg.reg"
@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
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.
bildet man das ganze Laufwerk C mitsamt allen Unterverzeichnissen
auf D ab, wenn vorhanden. Allerdings gehen dabei die langen
Dateinamen verloren.
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.
... 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 d | Xcopy "C:\Quellverzeichnis\irgendwas.zip"
"D: \Zielverzeichnis\irgendwas.zip"/K/D/Y/H
- /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.
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.)
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 Welt )
[ 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
Allerdings ist es in Windows 9x nicht
leicht, eine Benutzer-Eingabe in DOS zu erreichen.
Es geht, wenn auch umständlich, mit folgenden Befehl:
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 -
Vorschrift und zu finden hier
in der DOS-Exen.zip und hier als
Reply.zip .
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 )
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
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.
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 ):
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
Beschrieben hier und im
Freeware-Index.
Doch auch ohne diese DOS-Erweiterungen kann man mit Bordmitteln
eine Menge erreichen.
ALTER.EXE von Lincoln '32-bit' Jaros ; dort gibt es noch weitere nützliche DOS - Programme ( englisch ).
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
|
Von
FreeFind Inhaltsverzeichnis
|