Frage deutsch
~~~~~~~~~~~~~~~~
Wie hänge ich das aktuelle Datum an Dateinamen an?
 
Wie kann ich an die Namen aller Dateien in einem Verzeichnis das aktuelle Datum anhängen? Und wie kann ich ein Verzeichnis erstellen, das als Namen das heutige Datum hat?
 

Question English
~~~~~~~~~~~~~~~~
How to add the today's date to an filename?
 
 

Antwort 1
~~~~~~~~~~~~~~~~
[ von ant und MisterD im QB-Forum, 14.5.2003 - 16.12.2005 ]
 
*** Verzeichnisnamen
Mit SHELL "MKDIR " + DATE$ erstellt man ein Verzeichnis, welches das aktuelle Datum im Format "MM-TT-JJJJ" als Namen hat.
 
*** Dateinamen
Das Anhängen des Datums an einen vorhandenen Dateinamen gestaltet sich unter QBasic schwierig, da QBasic wie alle DOS-Programme nur 8.3 lange Dateinamen unterstützt und das kürzeste Datumsformat schon 6 Stellen hat (JJMMTT). Somit bleiben nur noch 2 Zeichen für den eigentlichen Namen.
 
Das Anhängen des Datum an alle Dateien in einem Verzeichnis geht ganz einfach, wie das folgende Programmbeispiel zeigt:
 
INPUT "Pfadname ohne abschliessendes \ "; Verzeichnis$
Jahr$ = RIGHT$(DATE$, 2)
Monat$ = LEFT$(DATE$, 2)
Tag$ = MID$(DATE$, 4, 2)
Datumformatiert$ = Jahr$ + Monat$ + Tag$
SHELL "rename " + Verzeichnis$ + "\" + "??.* ??" + Datumformatiert$ + ".*"
 
Wenn man beim Datum das Jahr weglässt, hat man statt 2 sogar 4 Zeichen für den eigentlichen Dateinamen und die Dateien können dann etwa "boot1712.ini" heißen.
 
 

Antwort 2
~~~~~~~~~~
[ von jb im QB-Forum, 16.12.2005 ]
 
Hier mein Programmvorschlag, der auch lange Dateinamen unterstützt. Alles weitere im Programmkopf.
 
'***************************************************************************
' DAT2DAT.BAS = An die Namen aller Dateien eines Ordners das Datum anhaengen
' ===========
' Dieses Q(uick)Basic-Programm erfragt vom Anwender einen Verzeichnisnamen,
' z.B. "C:\uti" (ohne angehaengtes "\" eingeben!). Mit Hilfe des DIR-
' Befehls wird nun eine Dateiliste dieses Verzeichnisses erstellt und in die
' Datei tmp.dat abgelegt. Nun erstellt das Programm von allen Dateien im
' ausgewaehlten Verzeichnis eine Kopie, bei der im vorderen Bestandteil des
' Dateinamens (vor einem eventuellen Punkt) das aktuelle Datum in Format
' MM-TT-JJJJ angehaengt wird. Hierfuer kommt das COPY-Kommando zum Einsatz.
'
' Zum Aufruf der DOS-Kommandos DIR und COPY wird der Windows-Kommandozeilen-
' Interpreter CMD.EXE verwendet (bei Windows 9x muss man stattdessen
' COMMAND.COM verwenden). Daher werden lange Dateinamen unterstuetzt.
'
' (c) jb, 16.12.2005 (mit Ergaenzungen von Thomas Antoni)
'***************************************************************************
'
CLS
INPUT "Verzeichnis (ohne \): "; Verzeichnis$
'
'------ Das temporaere Verzeichnis suchen
RESTORE TMPDATA
FOR i = 1 TO 5
READ T$
IF ENVIRON$(T$) <> "" THEN
tmppfad$ = ENVIRON$(T$)
EXIT FOR
END IF
NEXT i
IF tmppfad$ = "" THEN
LINE INPUT "Bitte geben Sie ein temporaeres Verzeichnis ein: "; tmppfad$
END IF
'
'------ Dateiliste erstellen in temporaerer Datei tmp.dat
'Alle Dateien auflisten und in TMP.DAT im temporaeren Verzeichnis
'abspeichern:
SHELL "CMD /C DIR " + Verzeichnis$ + "\*.* /B > " + tmppfad$ + "\tmp.dat"
'Erlaeuterung:
'"CMD /C DIR" oeffnet den DOS-Kommadointerpreter CMD.COM, startet das
'DIR-Kommando und schliesst anschliessend CMD.COM wieder
'/B listet die Dateinamen zeilenweise ohne Kopfinformation auf
'
'------ Dateiliste aus tmp.dat auslesen und Dateien mit angehaengtem
'------ Datum mit COPY-Befehl zusaetzlich anlegen
F = FREEFILE
OPEN tmppfad$ + "\tmp.dat" FOR INPUT AS #F
DO UNTIL EOF(F)
LINE INPUT #F, Datei$
PunktPos% = INSTR(Datei$, ".") 'Position des Punkts vor der Dateiendung
IF PunktPos% THEN 'Punkt vorhanden?
DateiEinzeln$ = LEFT$(Datei$, PunktPos% - 1)
Endung$ = RIGHT$(Datei$, LEN(Datei$) - PunktPos% + 1) 'Dateiendung+Punkt
SHELL "CMD /C COPY " + Verzeichnis$ + "\" + Datei$ + " " + Verzeichnis$ + "\" + DateiEinzeln$ + "_" + DATE$ + Endung$
END IF
LOOP
CLOSE #F
PRINT "Alle Dateien kopiert."
'
'------ Temporaere Datei wieder loeschen
KILL tmppfad$ + "\tmp.dat"
END
'
'----- In Frage kommende Dateinamen temporaerer Dateien
TMPDATA:
DATA "TEMP", "temp", "Temp", "TMP", "tmp"
 
Das obige Programm steht im Verzeichnis Progs\ zur Verfügung sowie online unter www.antonis.de/faq/progs/dat2dat.bas .
 
 
 

Antwort 3
~~~~~~~~~~
 

Wie benenne ich einen Ordner per Batch mit dem aktuellen Datum?

Nach einem Artikel in der Computerzeitschrift CHIP 2/05
*** Aufgabenstellung
Für Ihre Datensicherung legen Sie unter Windows 2000/XP regelmäßig Ordner an und kopieren wichtige dateien aus Ihrem Arbeitsverzeichnis hinein. Das soll eine Batch-Datei übernehmen, die die Verzeichnisse zusätzlich mit dem aktuellen Datum benennt.
 
*** Lösung
Lesen Sie zunächst das aktuelle Datum und die Uhrzeit aus und formatieren Sie beides. In Batch-Dateien können Sie dazu die Systemvariablen "date" und "time" verwenden, die in Prozentzeichen eingeschlossen sind. So erzeugt das Kommando "echo %date%" die Bildschirmanzeige des Datums in einer DOS-Box, z.B."Mi 27.10.2004". Und mit "echo %time% erhalten Sie die aktuelle Uhrzeit; dabei sind Stunden, Minuten und Sekunden durch Doppelpunkte voneinander getrennt. Zusätzlich werden 100stel-Sekunden nach einem Komma angezeigt, also z.B. "18:41:00,96". Als Bezeichnung für den später noch zu erzeugenden Ordner ist das Ergebnis in dieser Form jedoch ungeeignet, da Windows Sonderzeichen in Verzeichnisnamen nicht zulässt.
 
Formatieren Sie daher die Ausgabe: Dazu können Sie hinter dem Befehl einen Doppelpunkt, gefolgt von einem Parameter, eingeben.Durch einen Nachsatz der Form ":.=," tauschen Sie zum Beispiel alle enthaltenen Punkte der Zeichenkettte gegen Kommata. Der Aufruf "echo "date:.=%" nutzt dieses Prinzip, um die Punkte aus dem Datum zu entfernen: Er ersetzt sie durch das Steuerzeichen "%", das bei der Ausgabe einfach weggelassen wird. Und mit dem Befehl "echo %date:~3,10%" entnehmen Sie einen Teilstring aus der Zeichenkette, der nach dem Zeichen 3 beginnt und 10 Zeichen umfasst. Ergebnis: Der Wochentag wird ausgeschnitten, nur das Datum wird angezeigt. Da Sie beide Operationen nicht direkt kombinieren können, müssen Sie den Wert nach der ersten Operation mit dem Befehl "set" in einer anderen Umgebungsvariablen zwischenspeichern, die Sie in einem weiteren Bearbeitungsschritt mit einem neuen Parameter weiter formatieren. Abschließend können Sie mehrere erzeugte Variablen dann direkt aneinanderreihen.
 
Um einen Ordnernamen mit Datum und Zeitangabe zu konstruieren, verwenden Sie beispielsweise folgende Befehle:
 
set Datum1=%date:.=%
set Datum=%Datum1:~3,8%
set Zeit1=%time:~0,8%
set Zeit=%Zeit1::=%
set Ordner=%Datum%-%Zeit%
 
Die Variable "Ordner enthält dann einen Wert wie "27102004-184100". Erzeugen Sie nun mit dem Befehl
 
md C:\Backup\%Ordner%
 
in Ihrem Backup-Ordner ein neues Verzeichnis (der DOS-Befehl "ms" steht für "make directory"), das als Namen den oben generierten Wert verwendet. Den Pfad können Sie an Ihre Vorgaben anpassen. Wenn Sie Ihre wichtigen Dateien beispielsweise im Verzeichnis "C:\Daten\" verwalten, übernimmt das Kommando
 
copy C:\Daten\*.* C:\Backup\%Ordner%
 
gleich das Kopieren aller Dateien in den neu angelegten Ordner. Auf Wunsch können Sie danach mit
 
%SystemRoot%\explorer.exe C:\Backup\%Ordner%
 
den Backup-Ordner in einem neu geöffneten Windows-Explorer-Fenster anzeigen lassen. Im Folgenden finden Sie nun alle Befehle untereinander:
 
set Datum1=%date:.=%
set Datum=%Datum1:~3,8%
set Zeit1=%time:~0,8%
set Zeit=%Zeit1::=%
set Ordner=%Datum%-%Zeit%
md C:\Backup\%Ordner%
copy C:\Daten\*.* C:\Backup\%Ordner%
%SystemRoot%\explorer.exe C:\Backup\%Ordner%
 
Kopieren Sie diese Befehle in eine Batch-Datei. Dazu können Sie die Befehls-Sequenz mit der Maus markieren, mit Strg+C in die Zwischenablage kopieren und mit Strg+V in die neue Textdatei einfügen. Speichern Sie die so erzeugte Textdatei beispielsweise als Batchdatei Backup.bat" ab.
 
 

Antwort 4
~~~~~~~~~~~
[ von Horst Schäffer und Frank Steinberg im DOS-Forum, 17.8.2001 - 21.2.2002 ]

Wie kann ich per Batch das Datum in einen Dateinamen integrieren?
Auf Horst Schäffers Webseite http://home.mnet-online.de/horst.muc/ gibt es im Paket "PBATS" das Tool "LOGECHO", das genau das Gewünschte leistet.
 
VARSET z.B. kann das aktuelle Datum in einer Umgebungsvariablen speichen. Folgendes muss in der ->
Batch-Datei stehen:
 
call varset Test=DATE
Wenn Du es mit SET kontrollierst, dann steht da
 
Test=17.08.2001
 
 

Antwort 5
~~~~~~~~~~~
[ von Oli im DOS-Forum, 6.12.2001 ]
Wie kann ich per Batch das Datum in einen Dateinamen integrieren?
Probier es mal mit dem Tool "xxcopy" (2-mal x), das auf
www.xxcopy.com/xxcopy/ zum Download bereitsteht.
Das Tool bietet recht umfangreiche Möglichkeiten. Es ist ein sehr mächtig und kann auch Deine Aufgabe erfüllen.
 
 
 

Antwort 6
~~~~~~~~~~~
[ von Rainer (
Rainer*RNetwork.de ) per Mail, 5.1.2003 ]
.
Wie kann ich per Batch das Datum in einen Dateinamen integrieren?
 
Hallo Thomas,
deine Tipps haben mir sehr geholfen. Ich habe mir die obenstehenden Antworten angeschaut), und mein Problem jetzt so gelöst:
 
@echo off
rem Erst muss der Zeitstempel als Variable bereitgestellt
rem werden und ins richtige Format gebracht werden
rem Es darf kein Doppelpunkt vorkommen!
set zeitstempel=%date%%Time%
set zeitstempel=%zeitstempel: =%
set zeitstempel=%zeitstempel::=%
set zeitstempel=%zeitstempel:.=%
set zeitstempel=%zeitstempel:,=%
rem jetzt muss eine weitere Batch aufgerufen werden,
rem damit die Variable %1 mit dem Dateinamen verfügbar ist
rem
call c.bat rechnung*
del c:\test\org\*.txt
 
und hier die aufgerufene Batch-Datei c.bat:
 
@echo off
rem hier werden die Dateien in einen anderen Namen umkopiert
rem %1 bedeutet "rechnungxx.txt"
rem
copy c:\test\org\%1 c:\test\scan\%1%Zeitstempel%.txt /-Y
 
 
 

[ The QBasic-MonsterFAQ --- Start Page: www.antonis.de/faq ]