Batch Programmierung (Dateiänderungsdatum-Zeit in Dateinamen anfügen
Hallo zusammen,
ich hoffe hier Hilfe zu finden ...
Folgendes Problem aus einer bereits bestehenden Batchdatei:
Ich möchte von c:\StartVerzeichnis\meineDatei.xlsx nach c:\Zielverzeichnis\meineDatei_Datum_Uhrzeit.xlsx kopieren
Datum und Uhrzeit sollen dem Datum und der Uhrzeit der letzten Speicherung entsprechen, also nicht dem Systemdatum oder -Uhrzeit
Datumsformat soll z. B. 31122021 und Uhrzeitformat 2245 entsprechen
Kopiert wird mit xcopy aus Windows 10 gesetzte Parameter sind /V /-Y
Also ungefähr so:
meineDatei.xlsx hat das Änderungsdatum 31.12.20221 und Änderungszeit 22:45h
Mein Wunsch wäre:
c:\cmd\xcopy.exe c:\StartVerzeichnis\meineDatei.xlsx c:\Zielverzeichnis\meineDatei_31122021__22_45.xlsx /V /-Y
In Euerem Forum habe ich dies gefunden, es für mich angepasst:
for /f "delims=" %%i in ('dir c:\Startverzeichnis\meineDatei.xlsx /s /b /a-d') do call :splitDate %%~ti
und bekomme
31.12.2021 22:45
heraus, aber wie bekomme ich es in den Dateinamen (meineDatei_31122021_2245.xlsx)?
LG Michael
ich hoffe hier Hilfe zu finden ...
Folgendes Problem aus einer bereits bestehenden Batchdatei:
Ich möchte von c:\StartVerzeichnis\meineDatei.xlsx nach c:\Zielverzeichnis\meineDatei_Datum_Uhrzeit.xlsx kopieren
Datum und Uhrzeit sollen dem Datum und der Uhrzeit der letzten Speicherung entsprechen, also nicht dem Systemdatum oder -Uhrzeit
Datumsformat soll z. B. 31122021 und Uhrzeitformat 2245 entsprechen
Kopiert wird mit xcopy aus Windows 10 gesetzte Parameter sind /V /-Y
Also ungefähr so:
meineDatei.xlsx hat das Änderungsdatum 31.12.20221 und Änderungszeit 22:45h
Mein Wunsch wäre:
c:\cmd\xcopy.exe c:\StartVerzeichnis\meineDatei.xlsx c:\Zielverzeichnis\meineDatei_31122021__22_45.xlsx /V /-Y
In Euerem Forum habe ich dies gefunden, es für mich angepasst:
for /f "delims=" %%i in ('dir c:\Startverzeichnis\meineDatei.xlsx /s /b /a-d') do call :splitDate %%~ti
und bekomme
31.12.2021 22:45
heraus, aber wie bekomme ich es in den Dateinamen (meineDatei_31122021_2245.xlsx)?
LG Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1748589042
Url: https://administrator.de/contentid/1748589042
Ausgedruckt am: 23.11.2024 um 12:11 Uhr
8 Kommentare
Neuester Kommentar
Servus Michael,
wieso nutzt für so etwas noch Batch? In Powershell ist das schon seit langer Zeit viel weniger Aufwand und klarer aufgebaut:
Wenn's warum auch immer doch noch Batch sein muss kannst du bspw. das bemühen
Grüße Uwe
wieso nutzt für so etwas noch Batch? In Powershell ist das schon seit langer Zeit viel weniger Aufwand und klarer aufgebaut:
Get-ChildItem "D:\Quelle" -File -Filter *.xlsx | copy-item -Destination {"D:\Ziel\$($_.Basename)_$($_.LastWriteTime.toString('ddMMyyyy_HH_mm'))$($_.Extension)"} -verbose
@echo off &setlocal
set "QUELLE=D:\Quelle"
set "ZIEL=D:\Ziel"
for %%a in ("%QUELLE%\*.xlsx") do for /f "tokens=1-5 delims=:. " %%b in ("%%~ta") do copy "%%a" "%ZIEL%\%%~na_%%b%%c%%d_%%e_%%f%%~xa"
Grüße Uwe
Sekunden bekommst du über den For Loop nicht da Batch keine Zeiten mit Sekundenauflösung bietet, du kannst aber problemlos den o.g. PowerShell Code ergänzt um die Sekunden in deine Batch folgendermaßen einbauen.
Wenn du warum auch immer bei "plain" Batch ohne kleine Powershell Hilfe bleiben willst, lässt sich das Änderungsdatum über WMI abfragen, ist aber ehrlich gesagt was Performance angeht unterirdisch, wenn dich das aber nicht stört, bitte:
Grüße Uwe
@echo off
set "QUELLE=D:\Quelle"
set "ZIEL=D:\Ziel"
PowerShell -EP Bypass -NoP -C "Get-ChildItem '%QUELLE%' -File -Filter *.xlsx | copy-item -Destination {\"%ZIEL%\$($_.Basename)_$($_.LastWriteTime.toString('ddMMyyyy_HH_mm_ss'))$($_.Extension)\"} -verbose"
Wenn du warum auch immer bei "plain" Batch ohne kleine Powershell Hilfe bleiben willst, lässt sich das Änderungsdatum über WMI abfragen, ist aber ehrlich gesagt was Performance angeht unterirdisch, wenn dich das aber nicht stört, bitte:
@echo off &setlocal enabledelayedexpansion
set "QUELLE=D:\Quelle"
set "ZIEL=D:\Ziel"
for %%a in ("%QUELLE%\*.xlsx") do (
set "filepath=%%a" & set "filepath=!filepath:\=\\!"
for /f "tokens=2 delims=.=" %%b in ('wmic path cim_datafile where "name='!filepath!'" get LastModified /value') do (set "dt=%%b" &set "dt=!dt:~6,2!!dt:~4,2!!dt:~0,4!_!dt:~8,2!_!dt:~10,2!_!dt:~12,2!")
copy "%%a" "%ZIEL%\%%~na_!dt!%%~xa"
)
Ich muss noch einen Fehler im Code haben ...
Lass die Backslashes am Ende der Pfadangaben weg, die sind zu viel.Wunsch "meine Datei_vom_DDMMYYY_um_HHMMSS.xlsx
@echo off &setlocal enabledelayedexpansion
set "QUELLE=c:\meinQuellverzeichnis"
set "ZIEL=c:\meinZielverzeichnis"
for %%a in ("%QUELLE%\*.xlsx") do (
set "filepath=%%a" & set "filepath=!filepath:\=\\!"
for /f "tokens=2 delims=.=" %%b in ('wmic path cim_datafile where "name='!filepath!'" get LastModified /value') do (set "dt=%%b" &set "dt=!dt:~6,2!!dt:~4,2!!dt:~0,4!_um_!dt:~8,2!!dt:~10,2!!dt:~12,2!")
copy "%%a" "%ZIEL%\%%~na_vom_!dt!%%~xa"
)