samira-
Goto Top

Datei verschieben um bestimmte Uhrzeit.

Guten Tag,
bin neu hier und kenne mich garnicht aus mit Batch Dateien. Ich hoffe mir wird geholfen und ich bedanke mich schon mal vorher.

Zuerst einmal habe ich eine Frage, und zwar werden die Batch Dateien von alleine ausgeführt? Oder muss ich da erst draufklicken?
Wenn es von alleine ausgeführt wird, ist es möglich ohne benachrichtigt zu werden? Also es soll einfach ausgeführt werden, ohne das das mitkriege.

Nun zu meiner eigentlichen Frage. Ich möchte einen bestimmten Ordner von A nach B kopieren, dabei sollte es aber komplett rüber gezogen werden, ohne das er noch im ersten Verzeichnis vorhanden ist.
Das Problem dabei wäre, es ist immer der selbe Ordner, also dürften die verschobenen Ordner nicht ersetzt werden, sondern mit der Endung 2, 3, 4, usw. kopiert werden.
Dann noch zu der dritten Sache, der Ordner sollte um eine bestimmte Uhrzeit immer verschoben werden, bzw. einmal am Tag irgendwann.

Ich weiß es ist viel verlangt, meine Frage ist nun, würde das alles klappen und wenn ja, wie?

Vielen Dank
Samira-

Content-ID: 121846

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

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

rubberman
rubberman 02.08.2009 um 20:00:15 Uhr
Goto Top
Hallo Samira-,
keine Datei öffnet sich von selbst. Entweder man öffnent sie durch anklicken, lässt sie von einer anderen Anwendung öffnen, oder nutzt die Möglichkeiten des Betriebssystems das zu erledigen (Autostart, geplanter Task). Für dein Vorhaben sollte der geplante Task das sein, was du suchst.
MOVE sollte der Befehl sein, der dir das Verzeichnis verschiebt. Die Sache mit dem Hochzählen ist auch machbar. Man muss eben jedes mal prüfen, welche Verzeichnisse bereits existieren.
Da du scheinbar noch nicht sehr viel Erfahrung hast, solltest du noch einmal genau das Verzeichnis (jeweils mit Pfad) posten, das verschoben werden soll, sowie das Verzeichnis in das verschoben werden soll.

Grüße
rubberman
Labamba81
Labamba81 03.08.2009 um 08:50:47 Uhr
Goto Top
Schau dir mal das Robocopytool von MS an. Zusammen mit der Yarcgui kann man das prima konfigurieren.

Ich weis zwar nicht ob man die Ordner durchnummerieren kann (Chancen stehen alelrdings nicht schlecht). Was ich aber definitiv weis, ist das man das aktuelle Datum bis auf die Sekunde genau eingeben kann.

http://www.heise.de/software/download/special/backup_mit_robocopy/17_1
Samira-
Samira- 03.08.2009 um 10:24:13 Uhr
Goto Top
Vielen Dank für die schnellen Antworten. Und wie ist das mit dem Datum und der Uhrzeit, würde es auch dann durchgeführt werden, selbst wenn der Computer nicht eingeschaltet ist?

Der Ordner Unterlagen sollte vollständig kopiert werden. Er besteht im Verzeichnis:
C:\Users\Samira\Documents\Unterlagen

Sollte verschoben werden in in Ordner Vollständig. Er besteht im Verzeichnis:
C:\Users\Samira\Documents\Unterlagen

Also sollte er später irgendwann einmal im Ordner "Unterlagen" die Ordner "Unterlagen 1", "Unterlagen 2", usw. sein.
Labamba81
Labamba81 03.08.2009 um 12:25:51 Uhr
Goto Top
Zitat von @19122-:
Vielen Dank für die schnellen Antworten. Und wie ist das mit dem
Datum und der Uhrzeit, würde es auch dann durchgeführt
werden, selbst wenn der Computer nicht eingeschaltet ist?


Wie ist das denn gemeint? Bedingung für die Batchdatei, ist natürlich das die Quelle "C:\Users\Samira\Documents\Unterlagen" verfügbar ist (NAtürlich auch das Ziel).

Ist der PC/Netzwerkfestplatte/Server aus geht das natürlich nicht

Ein PC macht ohne Strom keinen Handschlag :
crashzero2000
crashzero2000 03.08.2009 um 12:55:10 Uhr
Goto Top
Der Ordner Unterlagen sollte vollständig kopiert werden. Er
besteht im Verzeichnis:
C:\Users\Samira\Documents\Unterlagen

Sollte verschoben werden in in Ordner Vollständig. Er besteht im
Verzeichnis:
C:\Users\Samira\Documents\Unterlagen

Also sollte er später irgendwann einmal im Ordner
"Unterlagen" die Ordner "Unterlagen 1",
"Unterlagen 2", usw. sein.

Das ist ja lokal auf deinem PC, also muß die Büchse dann auch eingeschalten sein.
rubberman
rubberman 03.08.2009 um 22:11:57 Uhr
Goto Top
Da beißt sich was. In deinem dritten Abschnitt schreibst Du, dass ein Ordner "Vollständig" in "Unterlagen" existiert, in den verschoben werden soll. Im vierten Abschnitt sollen die neuen Verzeichnisse aber direkt in "Unterlagen" erstellt werden.
Ja, wo denn nun?

Ich muss Labamba81 und crashzero2000 recht geben. Natürlich passiert nichts, wenn der Rechner aus ist. Im Zweifelsfall passiert auch nichts wenn der Rechne an ist, du aber nicht angemeldet bist. Die Frage ist, warum sollte überhaupt was passieren? Solange der Rechner ausgeschaltet ist, werden keine Daten erstellt, die verschoben werden könnten.

Also hast du folgendes Problem:
Wenn du das ganze als geplanten Task ausführen lassen willst, passiert nichts, wenn der Rechner zur angegebene Zeit aus ist. Wenn du das andererseits über den Autostart ausführen lässt, wird bei jedem Start des Rechners der Batch ausgeführt (ggf. also auch mehrfach am Tag) und ein neues Verzeichnis erstellt.
Wie wäre es, wenn du statt der fortlaufenden Numerierung, immer das aktuelle Datum an den Namen Anhängen würdest? Vorteile:
Du wüsstest auf den ersten Blick, wann das Verzeichnis erstellt wurde.
Das aufwendige Durchsuchen, welche Nummer die letzte war, entfällt.
Du kannst das ganze über den Autostart ausführen, da ein simpler Check, ob schon ein Verzeichnis mit dem aktuellen Datum existiert, genügt, um nicht mehrere Verzeichnisse an einem Tag zu erstellen
pieh-ejdsch
pieh-ejdsch 05.09.2009 um 05:48:40 Uhr
Goto Top
Moin samira,

sorry für meine späte Beantwortung aber ich hatte viele andere Sachen auch noch zu tun jetzt zu Deinem Problem

Es wird vor der VerschiebeZeit Verschoben und Zwar der komplette Inhalt von "C:\Users\Samira\Documents\Unterlagen" nach "C:\Users\Samira\Documents\Unterlagen 1"
und beim nächsten Zeitraum nach "C:\Users\Samira\Documents\Unterlagen 2" und so weiter.
Wenn Dein Ordner jetzt schon voller Dateien ist erledigt der Batch alles nach den jeweiligen Erstellungszeiten der Dateien bzw Ordner und Verschiebt in die jeweiligen "Unterlagen NR" pro Zeitraum.

Wenn die 24 Stunden nicht abgelaufen sind werden die Dateien dieses Zeitraumes nicht Verschoben. Du kannst also den Batch x-mal am Tag starten

ich gehe davon aus, dass Du die Dateien in den Ordner Unterlagen erstellst bzw hineinkopierst also nicht von irgendwo hinein Verschiebst, dann müsste es so klappen.

Bei
Set VerschiebeZeit=15:45
gibst Du hinter dem = die Zeit ein, welche die Verschiebezeit sein soll.
ganz unten die Zeile mit @echo wenn der Batch so anzeigen tut wie er soll - nur das @echo entfernen

Du kanst dann den Batch Verknüpfen also eine Verknüpfung vom Batch anlegen bei der Verknüpfung klickst Du Rechts und gehst auf den Reiter Verknüfung. In der Zeile Ausführen wählst Du dann Minimiert aus. dann Enter drücken. diese Verknüpfung kopierst Du Dir in den AutostartOrdner hinein. und wenn Du willst kannste noch den Batchlink zu der gleichen Zeit im Taskplaner starten.


@echo off & setlocal
:: Hier die tatsächliche Verschiebezeit eingeben als Stunde:Mintue
set VerschiebeZeit=15:45
set /a NR = 1
set "Pfad=C:\Users\Samira\Documents\Unterlagen"  
pushD "%Pfad%"  
:: ---------------------- gestern setzen---------
set "filedate=%date: *=%"  
for /f "tokens=2 delims=()" %%i in ('echo.^|date') do set Format=%%i  
set filetime=%Verschiebezeit%
call :1stTest
:: ---------------------- Pruefung auf letzten Intervall Ordner
for /f "tokens=2,*" %%i in ('dir /a:d zxy 2^>nul') do if "%%i"=="von" (set "folder=%%~nj" & for /f "tokens=*" %%k in ('dir "%%~fj*" /a:d /b ') do set "name=%%k" & call :foldrtst )  
:: ---------------------- Finden und Verschieben der Daten
for /f "skip=5 tokens=1-3*" %%i in ('dir /a: /o:gd /t:c') do (set /a NRb = NR & set "filedate=%%i" & set "filetime=%%j" & set "name=%%l" & call :timefram "%%k" )  

:: Wenn der Batch richtig funktioniert machst Du hier nur goto :eof
echo Ablauf fertig !&pause & goto :eof

:: ---------------------- Schleife: Pruefung auf letzten Intervall Ordner
:foldrtst
if "%name%" == "%folder% %NR%" (set /a NR + = 1 & goto :foldrtst ) else goto :eof  
:: ---------------------- Schleife: Finden und Verschieben der Daten
:timefram
for %%i in ("." "..") do if "%name%" == "%%~i" goto :eof  
echo "%filetime%" | findstr "Dat Ver" && goto :eof  
if not %NRb% == 0 if "%~1" == "<DIR>" (if "%name%" == "%folder% %NRb%" (goto :eof ) else (set /a NRb - = 1 & goto :timefram))  
:1stTest
:: ---------------------- Datumaufdröselung nach Numerisch ----------------------
for /f "tokens=1-3 delims=-" %%i in ("%Format%") do for /f "tokens=1-3 delims=.-" %%l in ("%filedate%") do set "%%i=%%l" & set "%%j=%%m" & set "%%k=%%n"  
:: --------- Zweistellige Jahresaufloesung (19)40 bis (19)99, (20)00 bis (20)39
if %JJ:~0,-1% leq 9 if %JJ:~0,-1% lss 4 (set JJ=20%JJ%) else set JJ=19%JJ%
:: LY              Schaltjahr
set /a LY = JJ / 4 - ( JJ - 1 ) / 4  - (JJ / 100 - ( JJ - 1 ) / 100) + ( JJ / 400 - ( JJ - 1 ) / 400 )
set /a MM=10%MM% %% 100
:: beforemonthdays Vergangene Tage im Jahr bis zum Vormonat LY xday
:: alldays         Vergangene Tage bis Dato als TageZahl
if %MM% lss 3 (set /a LY = 0 & if %MM% equ 2 (set /a xday = 2 ) else set /a xday = 1 ) else if %MM% equ 3 set /a xday = - 1
set /a beformonthdays =  (( MM - 4 + MM / 8 ) / 2 + ( MM - 1 ) * 30 ) + LY + xday
set /a TT=10%TT% %% 100
:: Vergangene Tage
set /a alldays=((JJ-1600)*365)+((JJ-1601)/4)+((JJ-1601)/100)-((JJ-1601)/400) + beforemonthdays + TT
:: ---------------------- Ende Datumaufdröselung nach Numerisch ----------------------
:: ---------------------- Zeitaufdröselung nach Numerisch ----------------------
for /f "tokens=1,2 delims=:" %%i in ("%filetime%") do set "HH=%%i" & set "min=%%j"  
set /a timenumber=(10%HH% %% 100)*60+(10%min% %% 100)
:: ---------------------- Ende Zeitaufdröselung nach Numerisch ----------------------
:: Vergleichen der gesetzten Zeit mit dem Letztem "lastupperlimit" . wenn "lastupperlimit"  
:: größer als "presenttime" dann Verschiebung im naechsten  Ordner bzw erstmal Anzeigen im CMD Fenster  
if not defined OldDate set /a OldDate=alldays-1 & set "MoveTime=%timenumber%" & goto :eof  
if not defined NowFileDate set NowFileDate=%alldays%
if %NowFileDate% lss %alldays% if %timenumber% lss %MoveTime% if not %OldDate% equ %alldays% set /a NR+=1,NowFileDate+=1
if %timenumber% lss %MoveTime% if %OldDate% equ %alldays% goto :eof

:: Wenn alles klappt so wie es Anzeigt entferne @echo
@echo move "%name%" "%folder% %NR%"  
pieh-ejdsch
pieh-ejdsch 31.05.2010 um 00:08:06 Uhr
Goto Top
Achtung !!! Bitte Beachten !!!

vor die Zeile 38
muss noch diese Zeile eingeschoben werden:
set /a xday=0

Gruß Phil