Avatar billede krohn Praktikant
30. december 2005 - 18:36 Der 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
Avatar billede bertelbrander Novice
30. december 2005 - 20:01 #1
For at få ugedag på XP skal du bruge et lille tool:
http://home20.inet.tele.dk/midgaard/datestr.zip

Så kan du lave en lille bat-fil:
@echo off
setlocal
set Dest=C:\temp
for /F %%D in ('datestr %%A') do set Dest=%Dest%\%%D

md %Dest%>nul 2>&1
copy c:\doc\*.doc "%Dest%"
copy c:\doc1\*.xml "%Dest%"

%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%"
Avatar billede krohn Praktikant
31. december 2005 - 07:30 #2
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

md %Dest%>nul 2>&1
copy c:\doc\*.* "%Dest%"
copy c:\doc1\*.* "%Dest%"
31. december 2005 - 11:21 #3
Under alle omstændigheder skal du bruge XCOPY for at få SUBDIR's med ...
http://hjem.get2net.dk/3t/3tsite/01_batchscripts/tips/02_batchscripts.html#XCOPY
Avatar billede bertelbrander Novice
31. december 2005 - 13:24 #4
Hvis du blot vil have den til at kopiere alt fra mapperne til C:\temp1:
@echo off
setlocal
set Dest=C:\temp1

md %Dest%>nul 2>&1
copy c:\doc\*.* "%Dest%"
copy c:\doc1\*.* "%Dest%"

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.
Avatar billede krohn Praktikant
31. december 2005 - 17:52 #5
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:)
Avatar billede bertelbrander Novice
31. december 2005 - 18:00 #6
Om /Y skriver xcopy /?:
  /Y          Undertrykker anmodning om at bekræfte, at filen må overskrive
              en eksisterende destinationsfil.

Prøv at fjerne linien med @echo off, og kør det fra en kommando prompt, så du kan se hvad det skriver når det køres.
Avatar billede krohn Praktikant
31. december 2005 - 19:46 #7
Ok prøver i morgen, godt nytår
Avatar billede krohn Praktikant
31. december 2005 - 20:10 #8
Denne virker ok i XP, vil prøve i NT 4.0 uden @echo off i morgen

@echo off
setlocal
set Dest=C:\temp1
md %Dest%>nul 2>&1
xcopy /S /Y c:\doc1\*.* "%Dest%"
xcopy /S /Y c:\doc\*.* "%Dest%"
Avatar billede krohn Praktikant
01. januar 2006 - 07:35 #9
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>set Dest=C:\temp1

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>md C:\temp1 1>nul 2>&1

C:\WINNT\Profiles\Administrator\Desktop>xcopy /E /Y c:\doc1\*.* "C:\temp1"
Invalid switch - /Y

C:\WINNT\Profiles\Administrator\Desktop>xcopy /E /Y c:\doc\*.* "C:\temp1"
Invalid switch - /Y

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?
Avatar billede krohn Praktikant
01. januar 2006 - 09:16 #10
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
Avatar billede krohn Praktikant
01. januar 2006 - 09:19 #11
Og er det muligt at få den til at køre minimeret?
01. januar 2006 - 13:26 #12
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...
Avatar billede bertelbrander Novice
01. januar 2006 - 15:07 #13
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
Avatar billede krohn Praktikant
01. januar 2006 - 16:19 #14
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.
Avatar billede bertelbrander Novice
01. januar 2006 - 17:41 #15
Det kan man godt, jeg kikker på det i aften når jeg får tid.

Skal det køre på NT4?
I så fald, hvad skriver NT4 når du kører kommandoen date /T
Avatar billede krohn Praktikant
01. januar 2006 - 18:08 #16
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?
Avatar billede krohn Praktikant
01. januar 2006 - 18:26 #17
NT4 skriver:
C:\>date /t
sø 01.01.2006
Avatar billede bertelbrander Novice
01. januar 2006 - 20:33 #18
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
Avatar billede krohn Praktikant
02. januar 2006 - 08:20 #19
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
Avatar billede krohn Praktikant
02. januar 2006 - 08:21 #20
i NT4, vil prøve på XP senere
Avatar billede krohn Praktikant
02. januar 2006 - 12:55 #21
xcopy /Y /S c:\Program\*.* "%Dest%"
Denne vil den ikke køre i NT4
Avatar billede bertelbrander Novice
02. januar 2006 - 19:42 #22
Hvordan set %Dest% ud?
Hvad skriver den når du forsøger at køre xcopy /Y /S c:\Program\*.* "%Dest%" ?
Avatar billede krohn Praktikant
03. januar 2006 - 06:32 #23
Den skriver i dos boxen:
C:\bat_fil>set Dest=\\gallant\vol1\home\dfo\backup

C:\bat_fil>set HistoryFile=history.txt

C:\bat_fil>set TempHistory=temphist.txt

C:\bat_fil>del /F /Q temphist.txt  1>nul 2>&1

C:\bat_fil>set OldDir=

C:\bat_fil>set Counter=0

C:\bat_fil>if exist history.txt (FOR /F %I in (history.txt) do call :Process %I
)  else (set Counter=0 )

C:\bat_fil>call :Process \\gallant\vol1\home\dfo\backup\02.01.2006

C:\bat_fil>if [] == [] (set OldDir=\\gallant\vol1\home\dfo\backup\02.01.2006 )
else (echo \\gallant\vol1\home\dfo\backup\02.01.2006  1>>temphist.txt )

C:\bat_fil>set /A Counter=0+1

C:\bat_fil>pause
Press any key to continue . . .

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?
Avatar billede bertelbrander Novice
03. januar 2006 - 20:21 #24
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.
Avatar billede krohn Praktikant
17. januar 2006 - 22:28 #25
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
Avatar billede bertelbrander Novice
17. januar 2006 - 22:31 #26
Jeg samler ikke på point.
Avatar billede krohn Praktikant
18. januar 2006 - 07:41 #27
Ok så lukker jeg her, tak for hjælpen:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester