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-Key: 7162090507

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

Printed on: April 27, 2024 at 10:04 o'clock

Member: TK1987
Solution TK1987 May 15, 2023 updated at 11:48:12 (UTC)
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
Member: buliwyf
buliwyf May 15, 2023 at 11:51:10 (UTC)
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\"  
Member: TK1987
Solution TK1987 May 15, 2023 at 12:04:29 (UTC)
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
Member: buliwyf
buliwyf May 15, 2023 updated at 12:52:05 (UTC)
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