Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datei automatisch umbenennen mit Datum und/oder Zähler durch Batchaufruf

Frage Entwicklung Batch & Shell

Mitglied: liedad

liedad (Level 1) - Jetzt verbinden

03.03.2005, aktualisiert 29.09.2006, 31688 Aufrufe, 42 Kommentare

Datei mit festem Namen mehrmals täglich durch Aufruf einer Batch umbenennen und mit Datum & Zähler versehen orginal.txt in orginal030305_1.txt usw.

Hallo zusammen, ich habe folgendes Problem: eine Datei mit festem Namen wird mehrmals täglich neu erstellt. Bevor sie die neue Datei erstellt wird, muss die alte umbenannt werden ohne die schon umbenannten zu überschreiben.

ren C:\orginal.txt orginal030305_1.txt

beim nächsten Aufruf der umbenenner.bat soll die orginal.txt in orginal030305_2.txt, ..._3.txt usw. umgetauft werden.

der Ansatz ist sicher bei alaska schon ganz gut!

Danke
42 Antworten
Mitglied: meto
08.03.2005 um 16:39 Uhr
Wie siehts denn aus, wenn du statt ner laufenden Nummerierung die aktuelle Uhrzeit hinter das Datum anhängst. Das Ganze könnte dann so aussehen:

for /F "tokens=1,2,3,4 delims=. " %%a in ('date /t') do set dateiname=%%d%%c%%b
for /F "tokens=1,2 delims=: " %%a in ('time /t') do set dateiname=%dateiname%_%%a%%b
ren original.txt original%dateiname%.txt
set dateiname=

Solltest du nun dringend eine laufende Nummerierung brauchen, poste noch mal, das geht auch.

Gruß
Meto
Bitte warten ..
Mitglied: liedad
09.03.2005 um 07:31 Uhr
Vielen Dank an Meto. Mit der Uhrzeit ist das auch machbar. Doch da ich mich nun schon mal auf das Problem mit fortlaufenden Zähler gestoßen bin, interessiert es mich schon wie man so etwas lösen kann. Dazu müsste eine Variable im System initialisiert werden, welche dann bei jedem Aufruf der Batch hochgezählt wird. Doch meine Versuche mit 'SET' wren nicht erfolreich.
Wo liegt mein Fehler.

rem echo off
rem Umbenennen der Importdatei
SET /A DATZ = %DATZ%+1
REM SET /A G = %%G%+1
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%b%%c%%d

ren orginal.txt orginal%cdate%_%DATZ%.txt

Gruß Liedad
Bitte warten ..
Mitglied: meto
09.03.2005 um 08:05 Uhr
Dein Ansatz ist grundsätzlich richtig. Die Zeile für zum adddieren muss also so aussehen:

SET /A DATZ=%DATZ%+1

Unbedingt beachten, dass keine Leerstellen vor und nach dem "=" vorhaden sind.

Wenn du die Variable jetzt aber so setzt, geschieht das nur temporär. Du müstest jetzt also eine Systemvariable mit dem Wert 1 setzen z. B. in der Autoexec.bat oder über Arbeitsplatz>Eigenschaften>Erweitert>Umgebungsvariablen. Dann funktioniert das auch.

Ein Problem könnte allerdings sein, dass die Variable (erst) bei System auf eins gesetzt wird. Daher müsste evtl. noch eine Überprüfung rein, ob die Datei schon vorhanden ist (bei Neustart am selben Tag), oder ob sich das Datum geändert hat (bei durchlaufendem Rechner).

Gruß
Meto
Bitte warten ..
Mitglied: liedad
09.03.2005 um 10:44 Uhr
Danke an Meto für den Hinweis auf die Systemvariable, einmal wird die Variable DATZ beim Aufruf der Batch hochgezählt, jedoch müsste dann die Systemvariable auch um den Wert 1 hochgezählt werden, damit beim nächsten Aufruf der Batch die Variable DATZ wieder um 1 erhöht wird.

rem Umbenennen der Importdatei
SET /A DATZ=%DATZ%+1
for /F "tokens=1,2,3,4 delims=. " %%a in ('date /t') do set dateiname=%%d%%c%%b
for /F "tokens=1,2 delims=: " %%a in ('time /t') do set dateiname=%dateiname%_%%a%%b
ren orginal.txt orginal%dateiname%_%DATZ%.txt
set dateiname=

Meto kannst du die Überprüfung auf das Vorhandensein eines Dateinamens oder des geänderten Datums mal näher erläutern?

Dank an Meto
Bitte warten ..
Mitglied: meto
09.03.2005 um 11:02 Uhr
Im Grunde geht es bei der Überprüfung um folgende Probleme:

1. Der Rechner ist ständig an:

Die Variable DATZ wird beim Systemstart auf 1 gesetzt und ab dann beim Aufrufen der Batchdatei hochgezählt. Solange kein Systemstart durchgeführt wird, wiederholt sich dieser Vorgang unendlich. Auch wenn es ein neues Datum gibt.
z. B. datei20050101_155.txt ist die 155. Kopie vom 01.01.05 nach 24 Uhr ändert sich der Dateiname wie folgt datei20050102_156.txt. Es ist aber nicht die 156. Datei vom 02.01.05 sondern die erste.
Hierzu könnte man, wenn notwendig, eine Routine einbauen, die das letzte Datum in eine weitere Variable speichert. Weicht dann die Variable vom aktuellen Datum ab, ist ein neuer Tag und DATZ wird auf 1 gesetzt.

2. Der Rechner wird zwischen durch neu gestartet:

Die Variable DATZ wird erneut auf 1 gesetzt. Das gibt jetzt ein Problem, wenn am 01.01.2005 bereits eine oder mehrere Dateien umbenannt wurden, denn die Datei datei20050101_1.txt gibt es ja schon. Es müsste also gegebenen Falls festgestellt werden, ob die Datei bereits exsistiert und sogar evtl. die letzte Nummer aus den Dateinamen gelesen werden. Es sei denn es ist kein Problem, wenn die Datei überschrieben oder nicht kopiert wird.

Gruß
Meto
Bitte warten ..
Mitglied: liedad
09.03.2005 um 11:39 Uhr
Meto Danke für deine Ausführungen. Wird die Variable schon nach dem Anlegen hochgezählt oder erst nach einem Neustart des Systems? Denn so oft ich auch die Batch starte, die DATZ bleibt bei 2 stehen nachdem sie beim ersten Aufruf der Batch um 1 erhöht wurde.
Bitte warten ..
Mitglied: meto
09.03.2005 um 15:49 Uhr
Mein Fehler. Kann auch nicht funktionieren, weil auch die Änderungen einer Systemvariable nur temporär sind. Arbeite aber schon an einer anderen Lösung.

Gruß
Meto
Bitte warten ..
Mitglied: meto
10.03.2005 um 09:37 Uhr
Hier das Script:

echo
cls
set /a DATZ=1
for /F "tokens=1,2,3,4 delims=. " %%a in ('date /t') do set datum=%%d%%c%%b
for /F "tokens=1,2 delims=: " %%a in ('time /t') do set uhrzeit=%%a%%b
dir original_%datum%_*.txt /b 1>_dateiliste.tmp
find "original" _dateiliste.tmp /c >_dateianzahl.tmp
for /f "skip=1 tokens=1,2,3 delims=: " %%a in (_dateianzahl.tmp) do set /a DATZ=%%c
set /a DATZ=%DATZ%+1
if %DATZ% LSS 10 set DATZ=0%DATZ%
ren original.txt original_%datum%_%DATZ%_%uhrzeit%_.txt
del _dateiliste.tmp
del _dateianzahl.tmp

Wichtig ist, dass keine nummerierten Dateien zwischdurch gelöscht werden. Das heist, wenn es einen Satz der Dateien 01, 02, 03, 04, 05 gibt, darfst du am aktuellen Tag nicht z. B. die Datei 03 löschen, weil er dann die Anzahl der Dateien mit vier feststellt und versucht die Datei mit 05 zu bezeichnen. Das geht aber nicht, weil die schon vorhanden ist. Kein Problem gibt es, wenn alle Dateien 03-05 gelöscht werden oder wenn du die anderen umbenennst, so dass es wieder passt.

Wenn du noch Fragen hast einfach posten.

Gruß
Meto
Bitte warten ..
Mitglied: liedad
10.03.2005 um 11:49 Uhr
Super Meto, jetzt funktioniert die Umbenennung ganz komfortabel. Wieder was gelernt

Dank und Gruß Liedad
Bitte warten ..
Mitglied: Bromer
24.01.2006 um 11:13 Uhr
Ich bin ein newbie in Sachen Skripts programmieren und ich möchte etwas ähnliches machen. Ich möchte einfach eine Log-Datei die momentan backup.txt heisst in backup_aktuelles Datum.txt umbenennen. Wie kann man soetwas programmieren?

Wäre sehr dankbar für eure Hilfe.
Bitte warten ..
Mitglied: meto
24.01.2006 um 11:52 Uhr
Versuchs damit:

ren backup.txt backup_%date%.txt
Bitte warten ..
Mitglied: Bromer
24.01.2006 um 11:58 Uhr
Habe ich auch schon probiert, aber es führt leider immer noch zu einem Syntaxfehler.

Wenn ich aber folgendes eingebe, dann klappt es: rename backup.txt backupok.txt

Wenn ich aber mit der variablen die Datei umbenennen will gibt es einen Syntaxfehler, aber wenn ich echo %date% mache, dann kann er die Variable umsetzten und es gibt keinen Fehler...

Was mache ich falsch?
Bitte warten ..
Mitglied: meto
24.01.2006 um 12:17 Uhr
Von welchem Betriebssystem reden wir? Bein WinXP Pro gehts definitiv.
Bitte warten ..
Mitglied: Bromer
24.01.2006 um 12:19 Uhr
Ich probiere es momentan auch an einem Win XP SP2, aber nachher sollte es dann auf eine SBS 2003 Server laufen...
Bitte warten ..
Mitglied: meto
24.01.2006 um 12:51 Uhr
Das geht!
Hast du das schon mal in einem CMD Fenster probiert?
Bitte warten ..
Mitglied: 8644
24.01.2006 um 12:58 Uhr
Hi,

setzt mal die Variable in Anführungszeichen!

Psycho

Klug ist jeder - der eine vorher, der andere hinterher
Bitte warten ..
Mitglied: meto
24.01.2006 um 16:11 Uhr
Wenn Anführungszeichen, dann der ganze Dateiname. Sollte aber auch ohne gehen. Funktioniert bei mir aus einer Batch und auf Kommandozeile.
Bitte warten ..
Mitglied: Biber
24.01.2006 um 17:56 Uhr
@meto
>>Wenn Anführungszeichen, dann der ganze Dateiname.
Jepp.
>>Sollte aber auch ohne gehen
Nein, wenn bei ihm das %date% in der Form "Mi, 24.01.2006" ausgegeben wird.
Denn da ist dieses Leerzeichen drin, welches zum "Syntax-Error" führt.

@Bromer
Die Minimallösung also wie von Psycho Dad gepostet (oder zumindest gemeint):
ren backup.txt "backup_%date%.txt"
-----> führt zu einer Datei "backup_Mi, 24.01.2006.txt"
Wenn Du das unschön und unübersichtlich findest, zerlege das Datum in JJ, MM und TT.
Siehe zum Beispiel im Batch-Tut-III im Bereich "Batch und Shell" ("Umgang mit Datums- und Zeitvariablen im Batch").
Dort ist auch eine "GetAllDateTimeInfos.bat" dabei, die Dir diese Zerlegerei eines %date%-Werts abnimmt.

HTH Biber
Bitte warten ..
Mitglied: meto
24.01.2006 um 18:14 Uhr
Stimmt. Dieses Datumsformat hatte ich nicht bedacht. Wo wird denn eigendlich gesteuert, wann das Datum wie ausgegeben wird?
Bitte warten ..
Mitglied: Biber
24.01.2006 um 18:43 Uhr
Moin meto,

gesteuert wird das Ganze über ca. 8 verschiedene Klicki-Bunti-Wege in Policies, Computer-, User-, Länder- und Regionseinstellungen sowie ein paar nicht auf dokumentiertem Weg einstellbaren Windows-Versionsabhängigen Werten in der Registry.

In dem o.a Batch Tut III habe ich das mal ein wenig aufgedröselt.

Falls heute abend nichts Spannendes im Fernsehen kommt..

Grüße Biber
Bitte warten ..
Mitglied: Bromer
25.01.2006 um 15:43 Uhr
Habe noch eine Zusatzfrage:

Ich möchte das mein Skript zuerst die Daten spiegelt mit Robocopy und dann ein Log macht das backup.txt heisst; danach soll beee die Datei backup.txt an meine E-Mail-Adresse senden; soweit so gut, bis hierhin funktionierts. Jetzt soll die backup.txt zu archivzwecken umbennent werden in backup_aktuelles Datum.txt und hier gibt es einfach wieder Probleme. Es führt den Befehl gar nicht aus und leider weiss ich nicht genau an was es liegt...

Hier das Skript:

@echo off

@set logf=E:\Log\Backup.txt
If not exist E:\Log\Backup.txt mkdir E:\Log\
:start
echo * setzten von Datum und Uhrzeit/öffnen Logfile *
@echo S T A R T > %logf%
@date /t >> %logf%
@Time /t >> %logf%
@echo. >> %logf%
echo Replizierung in Bearbeitung
robocopy.exe "C:\Dokumente und Einstellungen\Administrator\Desktop\Test" "C:\Dokumente und Einstellungen\Administrator\Desktop\Test 2" /MIR >> %logf%

echo Errorlevel: %errorlevel% >> %logf%
@echo. >> %logf%

@set logf=
sleep 5

:Pause

C:\Programme\Beee\beee.exe -s
sleep 5

:Pause

for /F "tokens=1,2,3,4 delims=. " %a in ('date /t') do set datum=%a_%b_%c%d
echo %datum%
rename E:\Log\Backup.txt Backup_%datum%.txt

sleep 5

exit
Bitte warten ..
Mitglied: Biber
25.01.2006 um 15:52 Uhr
Steht doch da, Bromer,

for /F "tokens=1,2,3,4 delims=. " %a in ('date /t') do set datum=%a_%b_%c%d
...wäre richtig vom CMD-Prompt.

for /F "tokens=1,2,3,4 delims=. " %%a in ('date /t') do set datum=%%a_%%b_%%c%%d
..ist richtig im Bätch (doppelte Prozentzeichen bei FOR-Zählvariablen).

HTH Biber
Bitte warten ..
Mitglied: Bromer
25.01.2006 um 16:04 Uhr
ach jo, hab ich nicht ganz gecheckt, danke schön. Habe auch noch gemerkt, dass ich bei rename die Anführungs- und Schlusszeichen machen muss...

Danke schön.
Bitte warten ..
Mitglied: yashi
04.03.2006 um 14:55 Uhr
hallo.

das thema ist zwar schon ein weilchen alt, da aber manche leute hier noch drin stöbern werden, noch ein paar gedanken von meiner seite zum eigentlichen problem.

die verwendung von "statischen umgebungsvariablen", das anlegen von temp-dateien und das durchsuchen dieser mit "find" finde ich an der stelle etwas umständlich. (verlorengehen der variable oder in version2 längere laufzeit des codes)
könnte auch sein, dass ich die problemstellung nicht richtig verstanden habe, aber für mich würde folgende lösung näher liegen:

##777777|%1 = original.txt##
----8<----- nur_sone_idee.bat ----8<-----

@echo off & setlocal
set "datum=%date:~-10%"
set "datum=%datum:.=%"

cd /d %~dp1
set /a "counter=0"

:countup
set /a "counter+=1"
##777777|set "cntrstrng=00%counter%"##
set "targetfile=%~n1_%datum%_%cntrstrng:~-3%%~x1"

if exist "%targetfile%" goto countup
ren %1 %targetfile%



----8<----- nur_sone_idee.bat ----8<-----


datum: ordentliche & sichere formatierung siehe bibers tuto no.3
%1: dieser parameter muss nicht zwingend verwendet werden, macht die batch aber universell einsetzbar. für eine datei die immer den gleichen name trägt kann man natürlich
"%~n1" durch "original"
"%~x1" durch ".txt"
ersetzen
die graue zeile könnte man auch weglassen - sieht halt nur schöner aus mit führender null.
wenn nun also am gleichen tag ein 2. backup von original.txt gemacht wird, guckt die batch ob %targetfile% schon da ist und inkrementiert den zähler bei bedarf.
#edit:
und wenn eine datei dazwischen gelöscht wird, wird die lücke halt einfach wieder gefüllt mit einer datei ....
#/edit

naja soviel zum thema counter -.-


mfg, das kleine unwissende yashi
Bitte warten ..
Mitglied: Rashtamoon
24.03.2006 um 14:29 Uhr
Hi!

Ich habe mir die hier gegebenen Informationen ausführlich durchgelesen und danke euch dafür.

Jetzt hätte ich aber ein weiteres Problem: Ich benötige im Dateinamen der umbenannten Datei die Zeit inclusive der Sekunden.

Leider bekomme ich das einfach nicht hin. Ohne Sekunden kein Problem, aber mit Sekunden bekomme ich Fehlermeldungen.

Was ist zu beachten bzw. zu ändern?

Vielen Dank für eure Hilfe

ciao
Bitte warten ..
Mitglied: Biber
24.03.2006 um 14:40 Uhr
Moin Rashtomoon,

versuch so anzufangen (am CMD-Prompt):
$cmd$for /f "tokens=1-4 delims=:," %i in ("%time%") do @echo %time%:[%i%j%k%l]

Ausgabe sollte sein:
14:37:39,92:[14373992]

HTH Biber
Bitte warten ..
Mitglied: Rashtamoon
24.03.2006 um 16:19 Uhr
Hi Biber,

danke für die schnelle Antwort.

Ja, die Ausgabe ist wie von Dir beschrieben.

Und nun?

ciao
Bitte warten ..
Mitglied: Biber
24.03.2006 um 17:36 Uhr
Sorry, Rashtamoon,
hatte zu flüchtig gelesen.
Wenn Du von einem Datei-Datum die Sekunden brauchst und nicht von der Systemzeit, ist mir unter dem CMD-Interpreter auch kein Weg/kein M$-Utility bekannt, das die Sekunden mit ausgibt/anzeigt.

Der normale DIR-Befehl zeigt jedenfalls die Zeit immer nur als hh:mm an.
Also wird der Umweg wahrscheinlich über einen VBS-Schnipsel gehen müssen oder über ein Freeware-Utility (falls existent). Werden bei Dir denn mehrere Dateien pro Sekunde angelegt?

Gruß
Biber
Bitte warten ..
Mitglied: Rashtamoon
24.03.2006 um 17:54 Uhr
Hallo Biber,

nein, du hast glaub ich schon recht verstanden.


Ich will eine Datei xxx.txt umbenennen in Datum_Zeit.txt.

Geht ja auch wunderbar, nur muss ich in der Zeit eben die Sekunden reinbekommen, das schaff ich nicht bisher.

Ich dachte eigentlich am Anfang es geht so simpel mit rename xxx.txt "xxx_%date%_%time%.txt"

Haut aber wie gesagt nicht hin.

Ja, es kommen Dateien von extern in ein Inboundverzeichnis und die werden dann alle 10 Minuten oder so umkopiert und umbenannt. Deshalb kann es vorkommen, daß im Inbound mehrere Dateien stehen und die würden dann innerhalb einer Minute kopiert.
Deshalb denke ich brauche ich die Sekunden im Dateinamen, sonst würde er die ja teilweise überschreiben, oder?

Ich dachte immer, ich kenn mich halbwegs aus mit batches, aber was ich hier so lese ist mir teilweise völlig neu

ciao
Bitte warten ..
Mitglied: Biber
24.03.2006 um 19:17 Uhr
Hm, Rashtamoon,

kommt darauf an, ob und wie die Dateien wiederfinden musst.

Wenn Du Deinen ersten Minimal-Ansatz ("Ich will eine Datei xxx.txt umbenennen in Datum_Zeit.txt.") umsetzen willst, kommst Du ja nach einem Test am CMD-Prompt darauf, dass da
a) nicht erlaubte Zeichen drin sind
b) die Sortierung absolut grottig wird bei mehreren umbenannten Dateien.

$cmd$echo %date% %time%
24.03.2006 19:02:54,18

würde ja beim Umbenennen mit...
"ren ?.txt %date% %time%.txt" heißen:
$cmd$ren x.txt 24.03.2006_19:02:54,18.txt
$cmd$ren ü.txt 24.03.2006_19:02:54,18.txt

...ist mit den ":" nicht erlaubt, mit dem Komma unschön und die vielen Punkte im Dateinamen sind auch nicht hilfreich.

Wenn Du trotzdem sinngemäß bei dieser Variante bleiben willst, solltest Du zumindest die Punkte im Datum %date%, die Kommata und die Doppelpunkte in der Zeit %time% ersetzen wie in den oberen Postings gezeigt.
Bsp:
$cmd$set "timestamp=%date%_%time%"
$cmd$set time
timestamp=24.03.2006_19:09:25,62
........Ersetze alle Leerzeichen
$cmd$set timestamp=%timestamp: =%
........Ersetzte alle Punkte
$cmd$set timestamp=%timestamp:.=%
...ersetze alle Doppelpunkte
$cmd$set timestamp=%timestamp::=%
...ersetze alle Kommata
$cmd$set timestamp=%timestamp:,=%
...timestamp=timestamp=24032006_19092562

oder, zwei Zeilen weiter im Batch dann
.. ren ü.txt %timestamp%.txt.

(==ren ü.txt 24032006_19092562.txt.)

Gruß Biber
Bitte warten ..
Mitglied: Rashtamoon
27.03.2006 um 13:53 Uhr
Hallo Biber,

vielen Dank für Deine umgehende Unterstützung, das war genau das was ich brauche.

Kannst Du mir noch sagen, wie ich den Wochentag aus dem Dateinamen rausbekomme?

Dann wär's perfekt

ciao
Rashtamoon
Bitte warten ..
Mitglied: yashi
27.03.2006 um 14:56 Uhr
%date:~-10%
liefert nur die letzten 10 Zeichen aus dem Datums-string
also
Mo, 27.03.2006
wird zu
27.03.2006

und
01.
set "datum=%date:~-10%" 
02.
set "datum=%datum:.=%"
liefert:
27032006

Kannst auch mal in Bibers Tuto #3 gucken - da ist es bugresistenter aufgeführt...



mfg
Bitte warten ..
Mitglied: Biber
27.03.2006 um 16:03 Uhr
Thx, yashi,

da im Moment das Batch-Tut-III nicht angezeigt wird, eine Kurzvariante zu Rashtomoons Frage. Aber Deine Lösung geht im deutschen Standard-Win genauso.
Falls mit "Wochentag rausbekommen" "Wochentag wegbekommen" gemeint war:

Am CMD-Prompt:
(=15:52:59 D:\temp=)
@for %i in (%date%) do @for /f "tokens=1-3 delims=." %a in ("%i") do set "datestr=%c-%b-%a"
set "datestr=2006-03-27"

So lassen sich die umbenannten Dateien besser sortieren.

Im Batch jeweils zwei Prozentzeichen bei den Zählvariablen statt einem.

Grüße Biber
Bitte warten ..
Mitglied: Herby-z
27.09.2006 um 11:03 Uhr
Hallo,

ich möchte Dateien (egal mit welcher Endung !!!) umbenennen.
z.B. test.doc -> test_27092006.doc

Habe auch schon einen Ansatz gefunden nur das mir hier die Aenderung an
den Dateianfang gesetzt wird.

lfnfor on
for %%a in (test*.*) do ren %%a %date%%%a

Am besten wäre natürlich wenn Unterordner mit einbezogen würden.

Ich zähle auf Euch
Bitte warten ..
Mitglied: Biber
27.09.2006 um 12:47 Uhr
Moin herby_z,

01.
for /r %%a in (test*.*) do ren "%%~dpnxa" "%%~na%mydate%%%~xa"
Wobei Du %mydate% nach Deinen Wünschen aus %date% ableiten musst (s.o.).

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
27.09.2006 um 15:02 Uhr
Alter Schwede was passiert hier ?????

for /r %%a in (test*.*) do ren "%%~dpna" "%%~na%mydate%%%~xa"

~dpna ??????
~na ?????
~xa ??????

Irgendwie passiert bei mir nichts !!!!

Könntest du mir diese Zeile etwas genauer erläutern ???
Jetzt habe ich gerade gedacht das ich den Einstieg in batches so lala schaffe und dann
kommst Du mit sowas

Schönen Tag noch mach jetzt Feierabend
Herby
Bitte warten ..
Mitglied: Biber
27.09.2006 um 16:40 Uhr
Na, Herby,

seit DOS 3.11 keine Batcherei mehr gemacht?
M$ hat sich da schon bewegt...

Spiel mal hiermit.

01.
:: snipp RenameTestHerby.bat ------optionaler Parameter Dateinamensanfang 
02.
:: Beispiel: RenameHerbyTest test ---> würde alle Dateien test*.* mit Datumsstempel versehen. 
03.
:: -->@for /f "tokens=2-4 delims=. " %%a in ("%date%") do @set "mydate=_%%a%%b%%c" 
04.
::--- damit es nicht an der Datumsformatierung von %date% scheitert, mach ich mal hier  
05.
:: eine Konvertierung von einem "festen" String ("Mi 27.09.2006") 
06.
@for /f "tokens=2-4 delims=. " %%a in ("Mi 27.09.2006") do @set "mydate=_%%a%%b%%c" 
07.
REM %%mydate%% hat nun den Wert "%mydate%"; umbenannt werden alle Dateien "%**.*" 
08.
@for /r %%a in ("%**.*") do @echo ren "%%~dpnxa" "%%~na%mydate%%%~xa"
Output des obigen Schnipsels:
01.
>RenameTestHerby.bat def 
02.
Y:\Eigene Dateien> 
03.
>REM %mydate% hat nun den Wert "_27092006"; umbenannt werden alle Dateien "def*.*" 
04.
ren "Y:\Eigene Dateien\Eigene Musik\DEFAULT.PLS" "DEFAULT_27092006.PLS" 
05.
ren "Y:\Eigene Dateien\totalcmd\DEFAULT.BAR" "DEFAULT_27092006.BAR" 
06.
ren "Y:\Eigene Dateien\totalcmd\default.br1" "default_27092006.br1"
Beispiel: wenn in der FOR..IN..DO..-Anweisung die Datei y:\bsp\test1.doc angefasst wird:
%%~dpnxa ?????? = Drive + Path + Name +eXtension der Datei in %%a = y:\bsp\test1.doc
%%~na ????? = Name der Datei in Zählvariable %%a = test1
%%~xa ??????= eXtension der Datei in Zählvariable %%a = .doc

Gruß
Biber
P.S.
Irgendwie passiert bei mir nichts !!!!
Oh... musst Dich doch nicht gleich vor allen outen...
Derartige Admin-Probleme kann ich leider nicht lösen ... *feixxxxx*
Bitte warten ..
Mitglied: Herby-z
28.09.2006 um 15:16 Uhr
Hallo,

bei mir wird das Datum mehrfach angehängt, von 2-4mal, keine Ahnung warum !!!!

Was diese Zeile macht ist mir auch schleierhaft:
@for /f "tokens=2-4 delims=. " %%a in ("Mi 27.09.2006") do @set "mydate=_%%a%%b%%c"

Vielleicht check ich es ja doch noch irgendwann !?!?!?!

Gruss
Herby
Bitte warten ..
Mitglied: Biber
28.09.2006 um 16:36 Uhr
bei mir wird das Datum mehrfach angehängt, von 2-4mal, keine Ahnung warum !!!!
Das liegt daran, dass Du den Batch 2-4mal aufgerufen hast.

Habe eine direkte Abhängigkeit eingebaut:
- 1x aufrufen = 1x Datum anhängen,
- 27x aufrufen = 27x Datum anhängen.

Was die FOR /F-Anweisung bedeutet, siehe unter FOR /? am CMD-Prompt.
Oder in dem gestern angegebenen Tutorial.
Oder in den 2000 FOR..IN..DO-Beispielen hier im Forum.

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
29.09.2006 um 07:48 Uhr
Hallo Biber,

das ist beim einmaligen Aufruf so.
Ich habe insgesamt 5Dateien in dem Ordner, wobei 2x das Datum 3fach angehängt,
2x das Datum 2fach angehängt und einmal das Datum 4fach angehängt wird.

Das Script wurde von mir so verändert: do @echo ren -> do ren, da ansonsten nichts gemacht wurde, das ist doch richtig, oder ????

Mir ging es bei meiner Frage was diese Zeile macht:
@for /f "tokens=2-4 delims=. " %%a in ("Mi 27.09.2006") do @set "mydate=_%%a%%b%%c"
um die Funktion tokens delims, kann darüber leider nichts finden

Mit besten Dank
Herby
Bitte warten ..
Mitglied: Biber
29.09.2006 um 11:01 Uhr
Moin herby_z,

kann den von Dir gemeldeten Fehler nicht reproduzieren, sorry.

Zu dem FOR /F -Aufruf findet sich in der noch umfangreicheren FOR/?-Hilfe am CMD-Prompt folgendes:
01.
FOR /F ["Optionen"] %Variable IN (Dateiensatz) DO Befehl [Parameter] 
02.
FOR /F ["Optionen"] %Variable IN ("Zeichenkette") DO Befehl [Parameter] 
03.
FOR /F ["Optionen"] %Variable IN (Befehl) DO Befehl [Parameter] 
04.
 
05.
    oder, unter Verwendung der Option "usebackq": 
06.
 
07.
FOR /F ["Optionen"] %variable IN (Dateiensatz) DO Befehl [Parameter] 
08.
FOR /F ["Optionen"] %variable IN ('Zeichenkette') DO Befehl [Parameter] 
09.
FOR /F ["Optionen"] %variable IN (`Befehl`) DO Befehl [Parameter] 
10.
 
11.
 
12.
    Der Dateiensatz besteht aus einem oder mehreren Dateinamen. Jede Datei 
13.
    wird geöffnet, gelesen und bearbeitet, dann wird mit der nächsten Datei 
14.
    des Satzes fortgefahren. Die Bearbeitung einer Datei erfolgt zeilenweise, 
15.
    jede einzelne Textzeile wird ausgewertet und in die entsprechenden Token 
16.
    (keinen oder mehrere) zerlegt. Die Befehle in der FOR-Schleife werden dann 
17.
    mit den Variablenwerten (d.h. den gefunden Zeichenketten bzw. Token) 
18.
    aufgerufen. Standardmäßig liefert /F den ersten, durch ein Leerzeichen 
19.
    getrennten Token von jeder Zeile in jeder Datei. Leerzeilen werden 
20.
    übersprungen. Das standardmäßige Verhalten bei der Analyse kann wahlweise 
21.
    durch den Parameter "Optionen" überschrieben werden. Das ist eine 
22.
    Zeichenkette in Anführungszeichen, welche eines oder mehrere Schlüssel- 
23.
    wörter enthält, um verschiedene Parameter für die Analyse anzugeben. Diese 
24.
    Schlüsselwörter sind: 
25.
 
26.
        eol=c           - Gibt das Zeichen für Zeilenendekommentare an 
27.
                          (nur eins). 
28.
        skip=n          - Gibt die Anzahl der Zeilen an, die am Anfang einer 
29.
                          Datei übersprungen werden. 
30.
        delims=xxx      - Gibt einen Satz von Trennzeichen an. Diese ersetzen 
31.
                          die Standardtrennzeichen TAB und Leerzeichen. 
32.
        tokens=x,y,m-n  - Gibt an, welche Token von jeder Zeile an die 
33.
                          FOR-Schleife weitergegeben werden. 
34.
                          Das führt dazu, dass zusätzliche Variablen erzeugt 
35.
                          werden. Mit der Form m-n wird dabei ein Bereich vom 
36.
                          m-ten bis zum  n-ten Token angegeben. Wenn das letzte 
37.
                          Zeichen ein Sternchen ist, wird eine zusätzliche 
38.
                          Variable deklariert, die den verbleibenden Text 
39.
                          dieser Zeile enthält. 
40.
        usebackq        - Gibt an, dass die neue Semantik in Kraft ist, 
41.
                          wobei eine Zeichenkette in umgekehrten Anführungs- 
42.
                          zeichen als Befehl ausgeführt wird und eine 
43.
                          Zeichenkette in Anführungszeichen ein literaler 
44.
                          Befehl ist, der die Verwendung von doppelten 
45.
                          Anführungszeichen um Dateinamen in Dateinamens- 
46.
                          sätzen erlaubt. 
47.
 
48.
    Einige Beispiele: 
49.
 
50.
FOR /F "eol=; tokens=2,3* delims=, " %i in (Datei.txt) do @echo %i %j %k 
51.
 
52.
    Dadurch wird jede Zeile in der Datei Datei.txt ausgewertet, Zeilen die 
53.
    mit einem Semikolon beginnen werden ignoriert, für den 2. und 3. Token 
54.
    jeder Zeile werden die Befehle in der FOR-Schleife ausgeführt. Trenn- 
55.
    zeichen sind Kommas und/oder Leerzeichen. In der FOR-Schleife wird der 
56.
    Ausdruck %i verwendet, um den 2. Token zu erhalten, %j für den 3. Token 
57.
    und %k, um alle übrigen Token zu erhalten. Dateinamen, die Leerzeichen 
58.
    enthalten, müssen Sie innerhalb doppelter Anführungszeichen angeben. Dazu 
59.
    müssen Sie die Option "usebackq" verwenden. Andernfalls werden doppelte 
60.
    Anführungszeichen zur Definition eines auszuwertenden Literals 
61.
    verwendet. 
62.
 
63.
    Dabei ist %i explizit deklariert, während %j und %k implizit durch die 
64.
    Option "tokens=" deklariert werden. Sie können bis zu 26 Token durch diese 
65.
    Option angeben, vorausgesetzt, es wird dadurch nicht versucht, eine 
66.
    Variable mit einem Buchstaben größer als 'z' zu deklarieren. Bedachten 
67.
    Sie, dass FOR-Variablen aus nur einem Buchstaben bestehen, Groß-/Klein- 
68.
    schreibung beachtet werden muss, dass sie global sind und nicht mehr als 
69.
    insgesamt 52 gleichzeitig aktiv sein dürfen. 
70.
 
71.
    Sie können den Befehl FOR /F auch direkt mit einer Zeichenkette verwenden, 
72.
    indem Sie die Zeichenkette in doppelten Anführungszeichen als Dateiensatz 
73.
    zwischen den Klammern angeben. Diese Zeichenkette wird dabei als 
74.
    einzelne Zeile einer Datei betrachtet und ausgewertet. 
75.
 
76.
    Schließlich können Sie den Befehl FOR /F auch verwenden, um die Ausgabe 
77.
    eines Befehls auszuwerten. Dazu geben Sie eine Zeichenkette in einfachen 
78.
    Anführungszeichen als Dateiensatz zwischen den Klammern an. Diese 
79.
    Zeichenkette wird dabei als Befehlszeile betrachtet und von einer unter- 
80.
    geordneten CMD.EXE ausgeführt. Die Ausgabe dieses Befehls wird dann wie 
81.
    eine normale Datei ausgewertet. Das folgende Beispiel listet die Um- 
82.
    gebungsvariablen im aktuellen Verzeichnis auf: 
83.
 
84.
        FOR /F " usebackq delims==" %i IN ((`set`) DO @echo %i
Sorry, dass ich nicht besser helfen konnte.
Vielleicht hat ja jemand anders eine Lösung.

Gruß
Biber
Bitte warten ..
Mitglied: Herby-z
29.09.2006 um 11:09 Uhr
Danke, da hätte ich auch selbst drauf kommen können
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Microsoft
Sfirm STA Datei automatisch kopieren (1)

Frage von thomasreischer zum Thema Microsoft ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...