Batch PC Herunterfahren nach vollständigem Kopieren ohne konkrete Zeitangabe

Dilax

Newbie
Registriert
Mai 2016
Beiträge
6
Hallo,

ich möchte nach meiner Sicherung (die habe ich schon im Internet gefunden und abgeändert, wegen der Ausgabe) den PC herunterfahren. Und zwar nicht erst nach einer bestimmten vorher festgelegten Zeit, sondern nachdem alle Dateien kopiert wurden.

Das Problem hierbei ist, dass alles, was unter dem letzten "goto :eof" ist, nicht mehr ausgeführt wird und meine Programmierkenntnisse reichen leider nicht aus, um das mit irgendeiner Schleife zu umgehen.
Denn einfach unten ein "shutdown /s" drunter zu schreiben, klappt leider nicht...

Das hier ist mein Programm:

Code:
@echo off & setlocal enableDelayedExpansion
title Datensicherung

Set "sourcefiles=C:\Test\*.*" & set "targetdir=C:\Users\Igor\Desktop\Dirk\Test\"
Set "xcopyOpts= /H /E /Y /I"

Set "tmplist=%temp%\x2copy.lst
xcopy %xcopyOpts% /L "%sourcefiles%" "%targetdir%" >%tmplist%
for /f %%i in ('findstr "Datei(en)" %tmplist%') do Set /a Anzahl=%%i
For /f "delims=" %%i in ('findstr /v "Datei(en)" %tmplist%') do call :XCopyIt "%%i" "%sourcefiles%"
del %tmplist%
goto :eof

:XCopyIt Parameter1: FQ-Quelldateiname para2: Sourcefiles
Echo noch %Anzahl% Dateien...
set "targetsubpath=%~dp1" 
xcopy %xcopyOpts% %1 %targetDir%!targetSubpath:%~dp2=!
set /a Anzahl-=1
goto :eof

Mit dem Pfad und dem eigentlichen Kopieren ist alles in Ordnung, brauche nur Hilfe beim hinzufügen eines Befehls, der nach dem Kopieren ausgeführt werden kann.

Danke schon im Voraus!
 
die goto Anweisung in Zeile 12 durch goto Beenden ersetzen und dann die Sprungmarke Beenden am Ende der Datei einfügen mit :Beenden
Darunter dann deinen Shutdown Befehl


Unabhängig davon würde ich Sicherungen anders durchführen lassen.
Wenns Commandozeile sein soll, dann robocopy /MIR
In deinem Beispiel ist viel unnötiger Schnickschnack drin, Anzahl der Dateien anzeigen lassen, die xcopy /L Simulation in Zeile 8, etc.
Sowas kann robocopy viel übersichtlicher in ein Logfile schreiben, welches beim nächsten Benutzen des Rechners angesehen bzw. ausgewertet werden kann.
 
Zuletzt bearbeitet:
Warum machst Du nicht eine eigene Sprungmarke (:Ende) statt :eof und schreibst Da Deinen Shutdown-Befehl darunter. Ich denke Goto :eof macht halt das was es soll - ans Ende der Datei gehen.

Außerdem : Ohne den Sinn der Batch genau durchdrungen zu haben - warum nimmst Du nicht robocopy statt xcopy - ist wesentlich mächtiger und würde wahrscheinlich die Batch deutlich vereinfachen.

Edit: zu langsam
 
Zurück
Oben