yogibaer85
Goto Top

CMD Script: Immer die neueste Datei 15 minuten schritt

Hallo Zäme

Ich habe ein kleines Problem. Ich hoffe es kann mir jemand helfen.

Ich müsse von einem Ordner wo mehre Dateien drin sind immer die neuest Datei kopieren. Es wird im 15 Minuten Takt eine neue Datei erstellt. Ich benötige immer von der neusten Datei eine Kopie.

Wie man Dateien kopiert weis ich. Doch es müsste immer die neuste sein.

merci

Gruess Yogi

Content-Key: 264322

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

Printed on: April 19, 2024 at 13:04 o'clock

Member: rubberman
Solution rubberman Feb 23, 2015 updated at 21:48:21 (UTC)
Goto Top
Hallo Yogibaer85, willkommen im Forum und Grüße in die Schweiz.

Teste folgendes:
@echo off &setlocal
pushd "C:\Pfad mit deinen Dateien"  
for /f "delims=" %%i in ('dir /b /a-d /od') do set "file=%%~fi"  
popd

echo "%file%"  
pause
Statt der ECHO Ausgabe sollte da natürlich dein Kopieren erfolgen.

Grüße
rubberman
Member: Yogibaer85
Yogibaer85 Feb 23, 2015 at 21:34:58 (UTC)
Goto Top
Hallo rubberman

Schöne grüsse nach Deutschland

Dein Typ ist super merci. Doch mein teil nicht wirklich. Mein teil Kopiert leider einfach alles was im Ordner ist.

Ich würde es so Kopieren:


xcopy c:\start c:\backup /y
Member: rubberman
Solution rubberman Feb 23, 2015 updated at 21:48:17 (UTC)
Goto Top
Ein XCOPY ist denke ich nicht nötig. COPY genügt völlig.

@echo off &setlocal
pushd "c:\start"  
for /f "delims=" %%i in ('dir /b /a-d /od') do set "file=%%~fi"  
popd

copy /y "%file%" "c:\backup\"  

Grüße
rubberman
Member: Yogibaer85
Yogibaer85 Feb 23, 2015 updated at 21:53:07 (UTC)
Goto Top
Merci viel mal es geht alles.
Jetzt hab ich doch noch eine kleine Frag. Wäre es möglich die Alte Datei zu überschreiben, auch wenn sie eine andere Name hat.

Gruess Yogi
Member: rubberman
Solution rubberman Feb 23, 2015 updated at 21:59:12 (UTC)
Goto Top
Natürlich. Du musst lediglich den Name der Datei mit angeben. Für Zeile 6:
copy /y "%file%" "c:\backup\AlteDatei.xyz"

Grüße
rubberman
Member: Yogibaer85
Yogibaer85 Feb 23, 2015 at 22:00:35 (UTC)
Goto Top
Merci rubberman

Klappet alles super.

Gruess Yogi
Member: rubberman
Solution rubberman Feb 23, 2015 updated at 22:13:46 (UTC)
Goto Top
Gern geschehen face-smile
Member: Yogibaer85
Yogibaer85 Feb 24, 2015 at 20:12:34 (UTC)
Goto Top
Hallo rubberman

Ich habe versucht das Skript über das Netzwerk anzuwenden. Doch das geht nicht. es wird immer de lokale Pfad angezeigt. den er nicht finden kann.

Hättest du für das auch eine Lösung?

Merci

Gruess Yogi
Member: rubberman
Solution rubberman Feb 24, 2015, updated at Feb 25, 2015 at 11:52:42 (UTC)
Goto Top
Hallo Yogi,

meinst du damit, dass das Script remote (auf einem anderen Rechner) ausgeführt werden soll?
Dazu wirst du wohl PsExec benötigen. Mehr Hilfe kann ich aber kaum anbieten, da ich mich mit der Arbeit auf Netzwerken nicht auskenne.

Grüße
rubberman
Member: Yogibaer85
Yogibaer85 Feb 25, 2015 at 07:35:05 (UTC)
Goto Top
Guten Morgen rubberman

Das Batch File wird auf einem Server ausgeführ. Holt eine Datei auf einem Pc. Doch dann bekomme ich diesen Fehler

"Z:\AklDbBackup4Pls\ALE_AKL_09_01_Backup_25_Februar_2015_8.30h.bak"
Das System kann das angegebene Laufwerk nicht finden.
Drücken Sie eine beliebige Taste . . .

Auch wenn ich den Netzwerk Pfad angegeben habe.

Gruess Yogi
Member: rubberman
Solution rubberman Feb 25, 2015 updated at 11:52:44 (UTC)
Goto Top
Hallo Yogi,

ich kann mir vorstellen, was passiert. Wenn du beim PUSHD einen Netzwerkpfad (\\sever\share\...) angibst, dann wird temporär ein Netzlaufwek verbunden und mit POPD wieder getrennt. Verschiebe also mal das POPD nach den Kopiervorgang (aus Zeile 4 an das Scriptende), dann vermute ich, dass es läuft.

Grüße
rubberman
Member: Yogibaer85
Yogibaer85 Feb 25, 2015 at 11:53:06 (UTC)
Goto Top
merci jetzt geht das auch.

Gruess Yogi
Member: Yogibaer85
Yogibaer85 Feb 27, 2015 at 09:18:39 (UTC)
Goto Top
Guten Tag Rubberman

Ist es Möglich diese 2 Skripts in eine datei zu Packen.

1 Datei:

if exist c:\start\ (


start backup.bat

goto ENDE

)

:Ende


2 Datei:

@echo off &setlocal

pushd "c:\start\*.*"

for /f "delims=" %%i in ('dir /b /a-d /od') do set "file=%%~fi"

echo "%file%"

del "c:\Backup\*.*" /q

copy /y "%file%" "c:\Backup\"

popd


Merci

Gruess Fabian
Member: rubberman
Solution rubberman Feb 27, 2015, updated at Feb 28, 2015 at 18:21:21 (UTC)
Goto Top
Hey Fabian.

Also vorab - das ist kein Problem. Aber bevor ich dort einsteige, noch ein paar Tipps:
  • PUSHD wechselt das Arbeitsverzeichnis. Dort an den Pfad die Wildcard-Kombination *.* anzuhängen, ist kontraproduktiv.
  • Wenn ein Batchcode am Ende angelangt ist, wird auch der Prozess beendet. Ein Label :Ende ist völlig unnötig. Wenn du den Prozess vorzeitig verlassen willst, kannst du entweder mit exit /b arbeiten, oder du nutzt den Sprung zum virtuellen end of file Label mit goto :eof (wobei das Label selbst nicht im Code steht).
  • Wenn du einen Sourcecode im Forum postest, nutze bitte <code>...</code> Tags, damit es lesbar bleibt und @ Zeichen und die Zeileneinrückung erhalten bleiben. Merci face-smile

OK, zurück zum Thema. Das if-Statement kennt auch das Schlüsselwort not. Worauf ich hinaus will: Wenn das Startverzeichnis nicht existiert, dann beende den Batchprozess. Anderenfalls führe deine Kopieraktion aus.
Auf dein Beispiel bezogen, so:
@echo off &setlocal

set "src=c:\start\"  
set "dest=c:\Backup\"  

if not exist "%src%" exit /b  

pushd "%src%"  
for /f "delims=" %%i in ('dir /b /a-d /od') do set "file=%%~fi"  
echo "%file%"  
del "%dest%*.*" /q  
copy /y "%file%" "%dest%"  
popd

Grüße
Steffen
Member: Yogibaer85
Yogibaer85 Feb 28, 2015 at 18:56:38 (UTC)
Goto Top
Hallo Steffen

Sorry..

aber merci viel mol.

Gruess Fabian
Member: rubberman
Solution rubberman Feb 28, 2015, updated at Mar 02, 2015 at 07:38:07 (UTC)
Goto Top
Hallo Fabian

Sorry für was? Alles OK face-wink

Was mir gerade noch eingefallen ist - du nutzt das Script ja eigentlich mit einem Netzwerkpfad.
Da funktioniert ein if (not) exist nicht zuverlässig bei der Detektion von Verzeichnissen.
Für Zeile 6:
for %%i in ("%src%") do if "%%~ai" lss "d" exit /b

Grüße
Steffen
Member: uhrw3rk
uhrw3rk Apr 16, 2024 at 09:07:09 (UTC)
Goto Top
neueste Datei (Änderungsdatum), auch von Subordner anzeigen:

@echo off
setlocal enabledelayedexpansion

set "currentScript=%~nx0"
set "newestFile="
set "newestDate=0"

for /f "delims=" %%i in ('dir /b /s /a-d /od') do (
set "file=%%~fi"
if /i not "!file!" equ "%~f0" (
set "fileDateTime=%%~ti"
if "!fileDateTime!" gtr "!newestDate!" (
set "newestDate=!fileDateTime!"
set "newestFile=!file!"
)
)
)

echo Newest file: "%newestFile%"