buliwyf
Goto Top

Altes Thema Batch aktuelle Datei kopieren?

Hallo liebe Freunde,

so alt und so oft dieses dieses Thema schon behandelt wurde trete ich doch irgendwie auf der Stelle?

Ich möchte in einem Verzeichnis die Tages aktuelle csv Datei in ein anderes Verzeichnis kopieren.

Folgendes dachte ich mir:

@echo off
set "basefolder=L:\csvDateien"  
set "nowDate=%date%"  
set "destFolder=W:\csvOrdner"  

for /f "tokens=*" %%a in ('dir /b /s /a-d "%basefolder%*.csv"')    do (  

    set "fileTime=%%~ta"  
    set "fileDate=!fileTime:~0,10!" & rem Dateidatum  von  Dateizeit  abtrennen  
    
    if [!fileDate!]==[%nowDate%] (
        echo %%~a, !fileDate! , %nowDate%
        copy /b "%%a" "%destFolder%"  >nul 2>&1  && echo %%~nxa  nach %destFolder% kopiert... || echo %%~nxa Zugriff verweigert ^^!^^!  
        echo:
    )
)
pause
exit /b 

Die csv Dateien stehen haben bekommen vom system bereits folgenden Namen zb: datei_20230515_115731.csv

Fehler: kann Datei nicht finden.
Andere, einfachere Lösungen?

Vielen Dank.

LG Stefan

Content-ID: 7162090507

Url: https://administrator.de/contentid/7162090507

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

TK1987
Lösung TK1987 15.05.2023 aktualisiert um 13:48:12 Uhr
Goto Top
Moin Stefan,

@echo off
set "basefolder=L:\csvDateien"  
set "destFolder=W:\csvOrdner"  

for %%A in ("%basefolder%\Datei_%date:~-4%%date:~3,2%%date:~0,2%*.csv") do (  
  >nul copy "%%~A" "%destFolder%\" && echo]"%%~nxA" nach "%destFolder%" kopiert.  
)

Gruß Thomas
buliwyf
buliwyf 15.05.2023 um 13:51:10 Uhr
Goto Top
Zitat von @TK1987:

Moin Stefan,

@echo off
set "basefolder=L:\csvDateien"  
set "destFolder=W:\csvOrdner"  

for %%A in ("%basefolder%\Datei_%date:~-4%%date:~3,2%%date:~0,2%*.csv") do (  
 >nul copy "%%~A" "%destFolder%\" && echo]"%%~nxA" nach "%destFolder%" kopiert.  
)

Gruß Thomas

Vielen Dank Thomas, und ich mache da so ein riesen Gewese drum face-wink


Mit Powershell wäre es noch einfacher
dir L:\csvDateien\*.csv | ?{$_.LastWriteTime -gt (Get-date).AddDays(-1)} | Copy-Item -Destination "W:\csvOrdner\"  
TK1987
Lösung TK1987 15.05.2023 um 14:04:29 Uhr
Goto Top
Zitat von @buliwyf:
Mit Powershell wäre es noch einfacher
Mit powershell wird alles leichter, aber du hattest ja explizit nach Batch gefagt 😉.

dir L:\csvDateien\*.csv | ?{$_.LastWriteTime -gt (Get-date).AddDays(-1)} | Copy-Item -Destination "W:\csvOrdner\"  
da ist aber ein kleiner Fehler drin:
(Get-Date).AddDays(-1)
gibt dir das Datum von gestern um die derzeitige Uhrzeit zurück. Du kopierst damit also nicht nur Dateien von heute, sondern ggfs. auch welche von gestern, solange sie in den letzten 24 Stunden erstellt wurden.

Um wirklich nur Dateien von heute zu kopieren:
dir L:\csvDateien\*.csv | ?{$_.LastWriteTime.date -eq (Get-date).date} | Copy-Item -Destination "W:\csvOrdner\"  

Gruß Thomas
buliwyf
buliwyf 15.05.2023 aktualisiert um 14:52:05 Uhr
Goto Top
Stimmt, das war der 24 Stunden Denkfehler, der ja eben wie du sagst auch 2 Datumstage umfassen kann.
Danke sehr, hab's korrigiert face-smile

Lg Stefan