Wenn bestimmtes Datum dann bestimmte Datei kopieren
Hallo Zusammen,
ich komme leider nicht weiter.
Ich möchte eine Datei kopieren, wenn ein bestimmtes Datum eintrifft.
Das heutige Datum soll vom System abgefragt werden (04.04.2016)
Wenn das heutige Datum mit dem Vergleichsdatum gleich sind, soll der Copiervorgang gestartet werden.
zum Beispiel:
Kenne mich mit der Programmierung nicht gut aus und finde daher den Fehler nicht.
Für eure Hilfe bin ich im Voraus sehr dankbar.
ich komme leider nicht weiter.
Ich möchte eine Datei kopieren, wenn ein bestimmtes Datum eintrifft.
Das heutige Datum soll vom System abgefragt werden (04.04.2016)
Wenn das heutige Datum mit dem Vergleichsdatum gleich sind, soll der Copiervorgang gestartet werden.
zum Beispiel:
@echo off
set Datum=%date%
if "Datum" == "04.04.2016"
(
xcopy "meinVerzeichnisPfad\Test_Batch\1.txt" "meinVerzeichnisPfad\kopiert" &
ren "meinVerzeichnisPfad\Test_Batch\kopiert\1.txt" "aktuell.txt"
)
Kenne mich mit der Programmierung nicht gut aus und finde daher den Fehler nicht.
Für eure Hilfe bin ich im Voraus sehr dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300898
Url: https://administrator.de/forum/wenn-bestimmtes-datum-dann-bestimmte-datei-kopieren-300898.html
Ausgedruckt am: 03.04.2025 um 04:04 Uhr
31 Kommentare
Neuester Kommentar
Hallo rohu2007 und willkommen im Forum!
Abgesehen davon, dass die Variable für das Datum eigentlich unnötig scheint, wäre sie in Zeile 5 als %Datum% zu schreiben; sinnvoller wäre es mE, eine Variable zumindest für die Quelldatei zu verwenden - daher könnte das zB eher so aussehen:
Sollte das Zielverzeichnis noch nicht existieren, stellt der angefügte Backslash sicher, dass es ohne Rückfrage erzeugt wird.
Die Verknüpfung des
Grüße
bastla
Abgesehen davon, dass die Variable für das Datum eigentlich unnötig scheint, wäre sie in Zeile 5 als %Datum% zu schreiben; sinnvoller wäre es mE, eine Variable zumindest für die Quelldatei zu verwenden - daher könnte das zB eher so aussehen:
@echo off & setlocal
set "Quelle=meinVerzeichnisPfad\Test_Batch\1.txt"
set "Ziel=meinVerzeichnisPfad\kopiert"
if "%date%" == "04.04.2016" xcopy "%Quelle%" "%Ziel%\" && ren "%Quelle%" "aktuell.txt"
Die Verknüpfung des
xcopy
und des ren
mit &&
sorgt dann noch dafür, dass nur bei einem erfolgreichen Kopiervorgang (Ende mit Errorlevel 0) die Umbenennung durchgeführt wird ...Grüße
bastla
Und hier noch eine kleine Lösung mittels PowerShell:
$date = "05.04.2016";
$source = "C:\sourceFolder\1.txt";
$destination = "C:\destinationFolder";
$sourceNewName = "aktuell.txt";
If (($date.ToDateTime([System.Globalization.CultureInfo]::CurrentCulture)).CompareTo((Get-Date)) -ne 1)
{
Copy-Item -Path $source -Destination $destination -Force;
Rename-Item -NewName $sourceNewName -Path $source -Force;
}
Ja, z.B. so:
@echo off
powershell.exe -executionpolicy remotesigned -File DeinPowershellScript.ps1
Den Wochentag kannst du z.B. so abfragen:
@echo off & setlocal
REM Wochentag als Zahl
for /F "skip=2 tokens=2-4 delims=," %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /Format:csv') do set daynr=%%A
REM Wochentag ausgeschrieben
set daysofweek=Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
for /F "tokens=%daynr% delims=," %%B in ("%daysofweek%") do set day=%%B
if "%day%"=="Montag" goto mo
if "%day%"=="Dienstag" goto di
if "%day%"=="Mittwoch" goto mi
if "%day%"=="Donnerstag" goto do
if "%day%"=="Freitag" goto fr
if "%day%"=="Samstag" goto sa
if "%day%"=="Sonntag" goto so
goto end
:mo
echo %day%
goto end
:di
echo %day%
goto end
:mi
echo %day%
goto end
:do
echo %day%
goto end
:fr
echo %day%
goto end
:sa
echo %day%
goto end
:so
echo %day%
HIER DEIN CODE FUER SONNTAG
goto end
:end
$date = @("05.04.2016", "06.05.2016", "07.05.2016");
$source = @("C:\sourceFolder\1.txt", "C:\sourceFolder\2.txt", "C:\sourceFolder\3.txt");
$destination = "C:\destinationFolder";
$sourceNewName = "aktuell.txt";
If (($date.ToDateTime([System.Globalization.CultureInfo]::CurrentCulture)).CompareTo((Get-Date)) -ne 1)
{
Copy-Item -Path $source -Destination $destination -Force;
Rename-Item -NewName $sourceNewName -Path $source -Force;
} ElseIf (($date[1].ToDateTime([System.Globalization.CultureInfo]::CurrentCulture)).CompareTo((Get-Date)) -ne 1) {
Copy-Item -Path $source[1] -Destination $destination -Force;
Rename-Item -NewName $sourceNewName -Path $source[1] -Force;
} ElseIf (($date[2].ToDateTime([System.Globalization.CultureInfo]::CurrentCulture)).CompareTo((Get-Date)) -ne 1) {
Copy-Item -Path $source[2] -Destination $destination -Force;
Rename-Item -NewName $sourceNewName -Path $source[2] -Force;
}
Und hier etwas schöner:
$dataSource = @(
("05.04.2016", "C:\sourceFolder\1.txt"),
("06.05.2016", "C:\sourceFolder\2.txt"),
("07.05.2016", "C:\sourceFolder\3.txt")
);
$destination = "C:\destinationFolder";
$sourceNewName = "aktuell.txt";
$dataSource | ForEach-Object {
If (($_.ToDateTime([System.Globalization.CultureInfo]::CurrentCulture)).CompareTo((Get-Date)) -ne 1)
{
Copy-Item -Path $_[1] -Destination $destination -Force;
Rename-Item -NewName $sourceNewName -Path $_[1] -Force;
}
}
Moin rohu2007,
ich würde eine kleine Textdatei namens "WeeklyImport.txt" anlegen mit sinngemäß diesem Inhalt:
Voraussetzung:
- der geschedulete Batch startet immer an einem der Tage, die in der Liste aufgeführt sind, z.B. immer Sonntags.
- und du weisst, an welchem Sonntag welcher import erwartet wird.
Dann kannst du deinen Bauch reduzieren auf
Ungetestet, aber hoffentlich von der Strategie her verständlich.
Grüße
Biber
[Edit] Tippfehler, s. Kommentar unten [/Edit]
ich würde eine kleine Textdatei namens "WeeklyImport.txt" anlegen mit sinngemäß diesem Inhalt:
Voraussetzung:
- der geschedulete Batch startet immer an einem der Tage, die in der Liste aufgeführt sind, z.B. immer Sonntags.
- und du weisst, an welchem Sonntag welcher import erwartet wird.
Y:\temp>type WeeklyImport.txt
03.01.2016, "C:\sourceFolder\16.wav"
10.01.2016, "C:\sourceFolder\17.wav"
17.01.2016, "C:\sourceFolder\18.wav"
...
Dann kannst du deinen Bauch reduzieren auf
@echo off & setlocal
Set "ziel=X:\DestinationFolder\"
for /f "tokens=1,2 delims=," %%i in (Y:\temp\weeklyImport.txt) do (
if "%%i"=="%date%" if exist %%j (
copy /y "%%j" "%Ziel%\aktuell.wav"
)
Ungetestet, aber hoffentlich von der Strategie her verständlich.
Grüße
Biber
[Edit] Tippfehler, s. Kommentar unten [/Edit]
Moin rohu2007,
den Grundgedanken meiner Batch hast du offensichtlich verstanden und auch den Tippfehler gefunden.
(habe das von dir gesehene fehlende Anführungszeichen oben ergänzt.)
Außerdem fehlt noch eine schliessende Klammer (einmal muss If-KlammerAuf eine KlammerZu bekommen, einmal auch das DO-KlammerAuf).
Ändere mal deinen Schnipsel so:
Mal schauen, was jetzt passiert.
Später kannst du die ersten beiden Zeilen mit ECHO wieder löschen und die dritte zum Teil.
Grüße
Biber
den Grundgedanken meiner Batch hast du offensichtlich verstanden und auch den Tippfehler gefunden.
(habe das von dir gesehene fehlende Anführungszeichen oben ergänzt.)
Außerdem fehlt noch eine schliessende Klammer (einmal muss If-KlammerAuf eine KlammerZu bekommen, einmal auch das DO-KlammerAuf).
Ändere mal deinen Schnipsel so:
@echo off & setlocal
Set "Ziel=C:\XXX\aktuell\"
for /f "tokens=1,2 delims=," %%i in (C:\XXX\Sonntage_2016.txt) do (
REM zwei Zeilen zum Testen
if "%%i"=="%date%" ECHO Gefunden: %date%
if exist %%j ECHO Vorhanden %%j
if "%%i"=="%date%" & if exist %%j (
ECHO Könnte jetzt tun: copy /y %%j "%Ziel%\aktuell.wav"
)
)
Mal schauen, was jetzt passiert.
Später kannst du die ersten beiden Zeilen mit ECHO wieder löschen und die dritte zum Teil.
Grüße
Biber
Moin rohu2007,
das ist mir jetzt fast peinlich...
Morgen vormittag bau ich den Batch mal nach und liefere dann eine getestete Variante.
Heute hatte ich leider schon einen klitzekleinen Feierabendtrunk... (oder ~trank? Egal..)
Muss mich deshalb ein bisschen aufs Fahren konzentrieren und kann nicht noch so viel tippen dabei.
Bis morgen
Biber
das ist mir jetzt fast peinlich...
Morgen vormittag bau ich den Batch mal nach und liefere dann eine getestete Variante.
Heute hatte ich leider schon einen klitzekleinen Feierabendtrunk... (oder ~trank? Egal..)
Muss mich deshalb ein bisschen aufs Fahren konzentrieren und kann nicht noch so viel tippen dabei.
Bis morgen
Biber
Das mit den " passiert wenn ich den Code hier reinkopieren.
In der Batch sind diese drin.
In der Batch sind diese drin.
Also wenn ich hier Code (woher auch immer) rein kopiere, dann wird das 1:1 übernommen.
Da wird kein Zeichen mittendrin weggelassen....
Der Syntaxfehler tritt ja offensichtlich direkt nach der Set-Anweisung auf.
Vielleicht postest du mal nen Screenshot von deiner Batch?
[OT]
Moin Zahlmeister,
danke für das Einspringen als Schwere-Geburts-Helfer und das Führen des Beitrags zu einem glimpflichen Ende.
Bei mir hat es doch einen Moment länger gedauert, den Rest-Alk vom Mittwoch (und danach heute meinen Posteingangskorb) abzubauen.
War begeistert, dass ja schon alles erledigt ist.
Danke dafür
Grüße und schönes Wochenende allen
Biber
[/OT]
Moin Zahlmeister,
danke für das Einspringen als Schwere-Geburts-Helfer und das Führen des Beitrags zu einem glimpflichen Ende.
Bei mir hat es doch einen Moment länger gedauert, den Rest-Alk vom Mittwoch (und danach heute meinen Posteingangskorb) abzubauen.
War begeistert, dass ja schon alles erledigt ist.
Danke dafür
Grüße und schönes Wochenende allen
Biber
[/OT]