30. december 2005 - 18:36Der er
26 kommentarer og 1 løsning
Hjælp til backup med .bat
Jeg har tidliger fået hjælp til en backup.bat her: http://eksperten.dk/spm/441488 Jeg må indrømme at jeg ikke helt kan huske hvad jeg gjorde for at få det til, så jeg må nok prøve igen. Jeg har brug for en batch fil der kan lave en backup af excel og word filer over på en server. f.eks. Kopier mappen c:\doc, og mappen c:\doc1 til netdrev r:\backup\ Og oprette en mappe enten med dato eller som her med navn (mo,tu...) der skal være 7 backup en for hver uge dag, når den når 7 starter den forfra.
Skal helst køre på NT 4 og på XP, hvis det er et problem med "navn" så er ugedag ok. Håber i kan hjælpe /krohn
%Dest% er mappen hvor filerne skal ligge Du kan selv putte flere copy kommandoer på og/eller rette dem der er. Du skal naturligvis rette Dest= i 3. linie. Hvis du har mellemrum i stinavne skal du have "" omkring, f.ex: copy "c:\Some Docs\*.xml" "%Dest%"
Jeg har prøvet at køre denne herunder,den ligger i C:\test. Den flytter godt nok det der er i doc, og i doc1 til temp1, men der bliver ikke oprettet nogen mapper, det er på OS NT 4.0. Jeg tror "jeg" dropper det med ugedage da det er nemmest hvis det kan køre på begge uden at instalere det tool.. Hvad er det jeg gør forkert? @echo off setlocal set Dest=C:\temp1 for /F %%D in ('datestr %%A') do set Dest=%Dest%\%%D
Hvis du vil have undermapper med er det lettest at bruge xcopy, noget i stil med: @echo off setlocal set Dest=C:\temp1 md %Dest%>nul 2>&1 xcopy /S /Y c:\doc1\*.doc "%Dest%" xcopy /S /Y c:\doc\*.xml "%Dest%"
Kør xcopy /? i en kommandoprompt for at finde ud af hvad alle dens parametre betyder.
Jeg har prøvet at køre denne, men der sker ikke noget @echo off setlocal set Dest=C:\temp1 md %Dest%>nul 2>&1 xcopy /S /Y c:\doc1\*.* "%Dest%" xcopy /S /Y c:\doc\*.* "%Dest%" (er det rigtigt at hvis jeg vil have tomme sub mapper skal jeg bruge /E) Jeg har i mappen doc1 en fil og i mappen en fil og en mappe, der kommer ikke noget til temp1. .bat var i temp1, og har prøvet den i c:\ Hvad står /Y for fandt det ikke ved at køre xcopy /?
Godt nytår til jer, sider på en pladtform i norge, derfor er der ikke andet at tage sig til sådan en dag:)
Har prøvet at køre denne: setlocal set Dest=C:\temp1 for /F %%D in ('datestr %%A') do set Dest=%Dest%\%%D md %Dest%>nul 2>&1 xcopy /E /Y c:\doc1\*.* "%Dest%" xcopy /E /Y c:\doc\*.* "%Dest%" pause
Og fik dette: C:\WINNT\Profiles\Administrator\Desktop>setlocal
C:\WINNT\Profiles\Administrator\Desktop>FOR /F %D in ('datestr %A') do set Dest= C:\temp1\%D The name specified is not recognized as an internal or external command, operable program or batch file.
C:\WINNT\Profiles\Administrator\Desktop>pause Press any key to continue . . . Dette er i NT 4 Hvis jeg køre: @echo off setlocal set Dest=C:\temp1 md %Dest%>nul 2>&1 xcopy /E c:\doc1\*.* "%Dest%" xcopy /E c:\doc\*.* "%Dest%" Så flytter den ok filer og sub mapper til temp1 men der oprettes ikke nogen mapper med dato/ugedag
Det tool til XP skal det også ligge på destinations maskinen?
Bare drop det med NT4 jeg har lige hørt at vores IT kommer ud og opgradere min maskine til XP i uge 3. Jeg har kørt denne i xp og der oprettede den en ny mappe med dato som den kopiered indholdet af c:\\ over til. hvor mange backups laver den før den starter med at slette de gamle, og kan jeg selv bestemme hvor mange backups der skal være, jeg kan godt se at hvis jeg skal bruge ugedage, så kan der bare være 7,men hvis man bruger dato, kan jeg så sætte det så der f.eks. bare er 4, 5, eller 23 backups før den stater med at slette/overskrive? Ved det er mange ting her i det nye år, håber i kom godt ind i det
I sidste ende vil du jo gerne have den til at rulle automatisk kl X på ugedag Z ? Dette ka' du (i XP) gøre vha [Kontrolpanel]|[Planlagte opgaver] - følg guiden...
Du kan bruge følgende til at få den til at skifte mellem 10 mapper:
@echo off setlocal if exist counter.txt ( for /F %%I in (counter.txt) do set Counter=%%I ) else ( set Counter=0 ) set /A Counter=%Counter%+1 if %Counter% GEQ 10 set counter=0 echo %Counter% >counter.txt
set Dest=C:\temp1\%Counter% md %Dest%>nul 2>&1
xcopy /S /Y c:\Program\*.txt "%Dest%"
Mapperne kommer til at hedde c:\temp1\0 .. c:\temp1\9 Du kan ændre 10 tallet i "if %Counter% GEQ 10 set counter=0" for at få flere/færre mapper. Bemærk at den skifter hver gang bat-filen køres, det går ikke efter dato.
Du kan bruge start kommandoen til at få det til at køre minimeret: Start "" /MIN minbatfil
Ok den køre ok på min maskine her NT 4, den opretter mapen med nummer, og flytter kopier indholdet over. ¨Det jeg mente var om man kunne få den til at navngive med dato f.eks. 01.01 2006 og frem til 10.01.2006 og der efter overskrive 01.01.2006 når den opretter 11.01.2006. Grunden til at jeg gerne vil kunne ændre hvormange dage jeg gemmer, er at der er andre her ude der gerne vil bruge samme løsning.
Da jeg sidder ved den sidste maskine ombord med NT4 og skal opgraderes til XP som alle andre i uge 3, så er det ikke så viktigt om den kan køre på NT4. Er det det samme om det er en UK eller en DK version af XP?
Følgende burde virke. Du skal rette xcopy linien og tilføje dem du ønsker, de skal stå samme sted. Mapperne kommer til at hedde c:\temp1\11-01-2006 på en dansk XP, på NT4 vil de hedde C:\temp1\01.01.2006. Jeg har kun testet på en dansk XP, men det bør virke på andre også. Den laver 10 mapper, og sletter den ældste hvis der er mere end 10. Den gemmer navne på gamle mapper i history.txt. Hvis du ikke kører scriptet en dag vil det stadig gemme de 10 seneste.
@echo off setlocal
set Dest=C:\temp1 set HistoryFile=history.txt set TempHistory=temphist.txt del /F /Q %TempHistory% >nul 2>&1 set OldDir= set Counter=0
if exist %HistoryFile% ( for /F %%I in (%HistoryFile%) do call :Process %%I ) else ( set Counter=0 )
if %Counter% GEQ 10 ( rd /S /Q %OldDir% del /F /Q %HistoryFile% ren %TempHistory% %HistoryFile% ) else if not [%OldDir%]==[] ( echo %OldDir% >%HistoryFile% copy %HistoryFile% + %TempHistory% %HistoryFile% >nul 2>&1 )
for /F "tokens=1,2" %%I in ('date /T') do ( set FP=%%I set LP=%%J )
if [%LP%]==[] ( set Dest=%Dest%\%FP% ) else ( set Dest=%Dest%\%LP% ) md %Dest% >nul 2>&1 echo %Dest% >>%HistoryFile%
xcopy /Y /S c:\Program\*.txt "%Dest%"
del /Q %TempHistory% >nul 2>&1 goto :eof
:Process if [%OldDir%]==[] ( set OldDir=%1 ) else ( echo %1 >>%TempHistory% ) set /A Counter=%Counter%+1
Er nu mødt på job, og har prøvet denne og den virker. Men jeg kan ikke lige se hvordan jeg får den til at køre minimeret. Er det denne her GEQ 10 ,der får den til at køre 10 gange før den skriver over? Så hvis jeg sætter den til 8 vil den køre 8 dage?
@echo off setlocal
set Dest=\\gallant\vol1\home\dfo\backup set HistoryFile=history.txt set TempHistory=temphist.txt del /F /Q %TempHistory% >nul 2>&1 set OldDir= set Counter=0
if exist %HistoryFile% ( for /F %%I in (%HistoryFile%) do call :Process %%I ) else ( set Counter=0 )
if %Counter% GEQ 10 ( rd /S /Q %OldDir% del /F /Q %HistoryFile% ren %TempHistory% %HistoryFile% ) else if not [%OldDir%]==[] ( echo %OldDir% >%HistoryFile% copy %HistoryFile% + %TempHistory% %HistoryFile% >nul 2>&1 )
for /F "tokens=1,2" %%I in ('date /T') do ( set FP=%%I set LP=%%J )
if [%LP%]==[] ( set Dest=%Dest%\%FP% ) else ( set Dest=%Dest%\%LP% ) md %Dest% >nul 2>&1 echo %Dest% >>%HistoryFile%
xcopy /E D:\Mudcontrolroom\DFO\*.* "%Dest%"
del /Q %TempHistory% >nul 2>&1 goto :eof
:Process if [%OldDir%]==[] ( set OldDir=%1 ) else ( echo %1 >>%TempHistory% ) set /A Counter=%Counter%+1
Den opretter bare en mappe på backup drevet med dato, og skriver i history.txt. Jeg kørte denne:
setlocal
set Dest=\\gallant\vol1\home\dfo\backup set HistoryFile=history.txt set TempHistory=temphist.txt del /F /Q %TempHistory% >nul 2>&1 set OldDir= set Counter=0
if exist %HistoryFile% ( for /F %%I in (%HistoryFile%) do call :Process %%I ) else ( set Counter=0 )
if %Counter% GEQ 10 ( rd /S /Q %OldDir% del /F /Q %HistoryFile% ren %TempHistory% %HistoryFile% ) else if not [%OldDir%]==[] ( echo %OldDir% >%HistoryFile% copy %HistoryFile% + %TempHistory% %HistoryFile% >nul 2>&1 )
for /F "tokens=1,2" %%I in ('date /T') do ( set FP=%%I set LP=%%J )
if [%LP%]==[] ( set Dest=%Dest%\%FP% ) else ( set Dest=%Dest%\%LP% ) md %Dest% >nul 2>&1 echo %Dest% >>%HistoryFile%
xcopy /Y /S D:\Mudcontrolroom\DFO\*.* "%Dest%"
del /Q %TempHistory% >nul 2>&1 goto :eof
:Process if [%OldDir%]==[] ( set OldDir=%1 ) else ( echo %1 >>%TempHistory% ) set /A Counter=%Counter%+1 pause
Jeg tager hjem om et par timer kl 11.00 så jeg lader den køre med xcopy /E D:\Mudcontrolroom\DFO\*.* "%Dest%" Da den virker
Takker meget for hjælpen, hvis du ønsker point skal du lægge et svar, hvordan får jeg den til at køre minimeret, jeg har prøvet at lægge Start "" /MIN minfil.bat men det gav bare en masse dos boxe som skulle lukkes manuelt?
Du skal ikke have den pause der. Det er der står efter :Process er en "funktion". Bat-scriptet ender med "goto :eof, så hvis du vil have en pause skal den stå lige inden den linie.
Prøv at putte følgende linie ind lige inden xcopy /E D:\Mudcontrolroom\DFO\*.* "%Dest%" echo "%Dest%" og se hvad den skriver.
Nej den har jeg fjernet, jeg er som sagt taget hjem, og det virkede da jeg tog af sted, så må jeg se om der er backup når jeg skal på arbejde i gen. Takker for hjælpen, har lært en del, lægger du et svar
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.