Avatar billede 2400nv Nybegynder
19. august 2003 - 20:36 Der er 57 kommentarer og
1 løsning

%username% part two

Hej
Jeg har fået lavet et script her på eksperten.dk, som kopiere brugerdata fra en eller flere brugere.

Det tidligere spørgsmål:
http://www.eksperten.dk/spm/329347

Jeg har brugt scriptet en del, men jeg synes, at der mangler noget.

Jeg kunne godt tænke mig, at man får lov til at vælge et backup/restore drev og kunne peje, hvor "Documents and Settings" biblioteket ligger (jeg har flyttet "Documents and Settings" til mit d: drev).


*****************************************************

@echo off
set PassOver=All Users Default User
:MainMenu
  cls
  set ValidChoice=SBR
  set Choice=
  echo.
  echo    - Hoved menu -
  echo.
  echo  S = Slut
  echo  B = Backup
  echo  R = Restore
  echo.
  set /p Choice=Indtast dit Valg:
  if {%Choice%}=={} goto MainMenu
  call set Test=%%ValidChoice:%Choice:~0,1%=%%
  if "%Test%" EQU "%ValidChoice%" goto MainMenu
goto MainChoice-%Choice:~0,1%

:MainChoice-S
goto :EOF

:MainChoice-B
  call :UniversalDate
  set Task=Backup
  set FromDrive=C:\
  set ToDrive=H:\
  set LogTxt=%Task% log: %dd%-%mm%-%yy% %time%
  set logFile=%ToDrive%%Task%.txt
goto :SubMenu

:MainChoice-R
  call :UniversalDate
  set Task=Restore
  set FromDrive=H:\
  set ToDrive=C:\
  set LogTxt=%Task% log: %dd%-%mm%-%yy% %time%
  set logFile=%ToDrive%%Task%.txt
goto :SubMenu

:SubMenu
  cls
  set ValidChoice=SHA
  set Choice=
  set /a Counter=0
  echo.
  echo    - %Task% menu -
  echo.
  echo  S = Slut
  echo  H = Hoved menu
  echo  A = Alle brugere
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 call :WriteSubMenu "%%a"
  )
  echo.
  set /p Choice=Indtast dit Valg:
  if {%Choice%}=={} goto SubMenu
  call set Test=%%ValidChoice:%Choice%=%%
  if "%Test%" EQU "%ValidChoice%" goto SubMenu
  if "%Choice:~0,1%" GTR "9" goto SubChoice-%Choice:~0,1%
  call :FindUser %Choice%
goto SubMenu

:SubChoice-H
goto :MainMenu

:SubChoice-S
goto :EOF

:SubChoice-A
  call :CopyAllUsers
goto :SubMenu

:WriteSubMenu
  set /a Counter+=1
  set Name=%1
  echo  %Counter% = %Name:"=%
  set ValidChoice=%ValidChoice%%Counter%
goto :EOF

:FindUser
  set /a Counter=0
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 call :CopyUser %1 "%%a"
  )
goto :EOF

:CopyUser
  set User=%2
  set User=%User:"=%
  set /a Counter+=1
  if %Counter% EQU %1 (
    cls
    echo.
    echo Starter %Task% af "%User%".
    echo.
    echo Tast Ctrl+c for at afbryde.
    echo %LogTxt% > %logFile%
    echo. >>%logFile%
    echo Kopierer filer fra %FromDrive% til %ToDrive% for %User% >>%logFile%
    echo. >>%logFile%
    xcopy "%FromDrive%Documents and Settings\%User%\Lokale indstillinger\Application Data\Microsoft\Outlook" "%ToDrive%Documents and Settings\%User%\Lokale indstillinger\Application Data\Microsoft\Outlook" /s/e/h/k/y/i/f/r/o/c >>%logFile% 2>&1
    xcopy "%FromDrive%Documents and Settings\%User%\Foretrukne" "%ToDrive%Documents and Settings\%User%\Foretrukne" /s/e /h/k/y/i/f/r/o/c >>%logFile% 2>&1
    xcopy "%FromDrive%Documents and Settings\%User%\Dokumenter" "%ToDrive%Documents and Settings\%User%\Dokumenter" /s/e/h/k/y/i/f/r/o/c >>%logFile% 2>&1
    xcopy "%FromDrive%Documents and Settings\%User%\Application Data\Microsoft\Address Book" "%ToDrive%Documents and Settings\%User%\Application Data\Microsoft\Address Book" /s/e/h/k/y/i/f/r/o/c >>%logFile% 2>&1
    echo. >>%logFile%
    cls
    echo.
    echo Færdig, tryk på en tast!
    pause >nul
    start Notepad %logFile%
  )
goto :EOF

:CopyAllUsers
  cls
  echo.
  echo Starter %Task% af "Alle brugere".
  echo.
  echo Tast Ctrl+c for at afbryde.
  echo %LogTxt% > %logFile%
  echo. >>%logFile%
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 (
      echo Kopierer filer fra %FromDrive% til %ToDrive% for %%a >>%logFile%
      echo. >>%logFile%
      xcopy "%FromDrive%Documents and Settings\%%a\Lokale indstillinger\Application Data\Microsoft\Outlook" "%ToDrive%Documents and Settings\%%a\Lokale indstillinger\Application Data\Microsoft\Outlook" /s/e/h/k/y/i/f/r/o/c >>%logFile% 2>&1
      xcopy "%FromDrive%Documents and Settings\%%a\Foretrukne" "%ToDrive%Documents and Settings\%%a\Foretrukne" /s/e /h/k/y/i/f/r/o/c >>%logFile% 2>&1
      xcopy "%FromDrive%Documents and Settings\%%a\Dokumenter" "%ToDrive%Documents and Settings\%%a\Dokumenter" /s/e/h/k/y/i/f/r/o/c >>%logFile% 2>&1
      xcopy "%FromDrive%Documents and Settings\%%a\Application Data\Microsoft\Address Book" "%ToDrive%Documents and Settings\%%a\Application Data\Microsoft\Address Book" /s/e/h/k/y/i/f/r/o/c >>%logFile% 2>&1
      echo. >>%logFile%
    )
  )
  cls
  echo.
  echo Færdig, tryk på en tast!
  pause >nul
  start Notepad %logFile%
goto :EOF

:UniversalDate
  set $tok=1-3
  for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
  if "%$d1:~0,1%" GTR "9" set $tok=2-4
  for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
    for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
      set %%x=%%u
      set %%y=%%v
      set %%z=%%w
      set $d1=
      set $tok=
    )
  )
goto :EOF
Avatar billede bertelbrander Novice
19. august 2003 - 22:43 #1
Der er en environment variabel der hedder %USERPROFILE% der netup kan bruges til at pege på hvor "Documents and Settings" biblioteket ligger.
Vil du selv modificere scriptet eller skal jeg forsøge?
Avatar billede 2400nv Nybegynder
20. august 2003 - 18:40 #2
Jeg kender godt variablen %USERPROFILE% (skal kun kopiere nogen mapper og ikke hele profilen). Har du prøvet scriptet? Jeg vil bare tilføjet dette:

"Jeg kunne godt tænke mig, at man får lov til at vælge et backup/restore drev og kunne pege, hvor "Documents and Settings" biblioteket ligger (jeg har flyttet "Documents and Settings" til mit d: drev)."

Hvis du kan hjælpe mig med dette, vil det være fedt :-)
Avatar billede bertelbrander Novice
20. august 2003 - 20:29 #3
Jeg vil kikke på det senere i aften
Avatar billede bertelbrander Novice
21. august 2003 - 00:00 #4
Jeg har nu den første version klar.
Den spørger om "Lokal" og "Backup" drev. Der skal kun angives et bogstav. Hvis brugeren blot trykker enter bruges H for backup og drev-bogstavet fra %USERPROFILE% for "Lokal" drev.

Jeg synes at scriptet er lidt for langt til at poste her så jeg har lagt det her:

http://home20.inet.tele.dk/midgaard/long.zip
Avatar billede 2400nv Nybegynder
21. august 2003 - 22:39 #5
Jeg har lige prøvet dit script. Ja, det er noget i den stil!

Kan man ikke kalde "Lokal" for placering af "Documents and Settings"?

Kan man ikke få lov til, at angive placeringen af ens backup til en mappe f.eks. "e:\backup"?

Hvis man indtaster en forkert drev-bogstav, kan scriptet så ikke skrive "Du har indtastet et drev som ikke findes, indtast et nyt".

Det er en god idé med en standard indstilling for "Lokal" og "Backup". Er det muligt at have en standard indstilling for "Lokal" og "Backup", som man kan rette i og scriptet "husker" til næste gang? Evt. under et punkt som hedder "indstillinger".
Avatar billede bertelbrander Novice
21. august 2003 - 23:53 #6
1: Lokal -> Documents and settings, done.
2: Backup på ex. e:\backup, done.
3: Fejl besked ved forket drev, done.
4: Scriptet vil nu huske de sidste drev/sti der blev brugt. Dette sker til en fil kaldet DefaultSet.cmd.

http://home20.inet.tele.dk/midgaard/long2.zip
Avatar billede 2400nv Nybegynder
24. august 2003 - 16:58 #7
Jeg har lige prøvet dit script. Jeg prøver det lige et par gange og kommer så med en tilbagemelding.

Dog kan jeg allerede se, at log-filen mangler noget. Log-filen skriver ikke dato og tid rigtigt. Kan man ikke lave i bunden af log-filen lave en total oversigt over, hvad der er kopieret og hvor mange fejl der har været.
Avatar billede bertelbrander Novice
24. august 2003 - 19:36 #8
Jeg mener ikke at jeg har lavet noget der skulle ændre på logfilen.
Avatar billede 2400nv Nybegynder
24. august 2003 - 19:46 #9
Nej, du har ikke ændret noget på log-filen. Kan du ikke lave scriptet, så det skriver dato og tid samt laver en total?
Avatar billede bertelbrander Novice
25. august 2003 - 00:34 #10
Jeg havde lavet en fejl der gjorde at datoen i første linie i log-filen var tom, rettet.
Jeg har lavet en statistik der viser hvor mange filer der der blev kopieret og hvor mange der fejl der opstod. Antallet af fejl er pt. antal gange xcopy skriver at der blev kopieret 0 filer. At der så er kopieret 0 fejl kan skyldes at den mappe man forsøgte at kopiere fra var tom eller ikke eksisterer. Det er lidt svært at lave en ordentlig statistik på fejl, men man kan stadig checke log-filen.

Den nye version kan findes her:
http://home20.inet.tele.dk/midgaard/l3.zip
Avatar billede 2400nv Nybegynder
25. august 2003 - 14:53 #11
Der er stadigvæk et eller andet i vejen, når jeg kører scriptet. I log-filen skriver den dato 0g tid sådan "Backup log: 25-08- 14:35:30,53".

Der mangler 2003 efter "25-08-" og kan man ikke udelade 1/100 sek.

Statistikken på fejl er lige som den skal være, FEDT!!

Kan man få scriptet til selv at finde, hvilke drev mappen "Documents and Settings" ligger? Nu når man kan finde selve mappen med "%USERPROFILE%".
Avatar billede bertelbrander Novice
25. august 2003 - 17:54 #12
Jeg forstår ikke hvorfor årstallet skulle mangle. Hvis årstallet stadig mangler vil jeg gerne have dig til at køre følgende kommando i en dos-prompt og fortælle mig hvad den skriver:
echo.|date

Jeg har rettet det så 1/100 sek ikke bliver udskrevet.

Jeg kan godt lave det så default for "dokuments and settings" tages fra %USERPROFILE% og ikke det der blev brugt sidste gang, er det det du vil have?

Ny version:
http://home20.inet.tele.dk/midgaard/l4.zip
Avatar billede 2400nv Nybegynder
25. august 2003 - 19:18 #13
Når jeg kører echo.|date får jeg følgende:

Datoen er angivet til: ma 25-08-2003
Indtast ny dato: (dd-mm-åå)

"Jeg kan godt lave det så default for "dokuments and settings" tages fra %USERPROFILE% og ikke det der blev brugt sidste gang, er det det du vil have?" Hvis du mener med det, at scriptet selv finder mappen "Documents and Settings" ligemeget på hvilke drev mappen ligger på, så er svaret JA.

Så kan vi også droppe DefaultSet.cmd-filen.
Avatar billede bertelbrander Novice
25. august 2003 - 19:30 #14
Jeg går ud fra at scriptet aldrig har vist årstal rigtigt i log-filen?
Hvad sker der når du kører kommandoen:
echo %date%
i en kommando prompt? Er det ok at bruge det format i log-filen?

Vi behøver vel stadig DefaultSet.cmd filen til at gemme backup mappen i?
Avatar billede 2400nv Nybegynder
25. august 2003 - 20:07 #15
Nej, scriptet har fra starten ikke vist årstallet rigtigt i log-filen.

Med echo %date% får jeg: ma 25-08-2003
Det er fint nok med "ma 25-08-2003"

Jeg vil helst slippe af med DefaultSet.cmd filen. Der er ingen grund til at gemme backup mappen i DefaultSet.cmd filen. Det er okay som man vælger drev og evt. mappe nu. Er der nogen mulighed for at browse ned til mappen?

Hvor har du lært alt dette programmering? Jeg kendte det fleste kommandoer, men de forskellige parametre er noget nyt for mig. Hvordan kommer jeg videre?
Avatar billede bertelbrander Novice
25. august 2003 - 23:35 #16
Årstallet skulle blive udskrevet korrekt nu.
Nu tager scriptet doc&set-drev fra %USERPROFILE% og default for backup er d:\backup, dvs defaultset.cmd er fjernet.

Man kan sansynligvis godt lave det så man kan browse efter backup mappe, men jeg tror at det vil blive for kluntet til at være brugbart. Det er f.ex. aldrig lykkedes mig at finde en metode til at finde ud af hvilke drev der er tilgængelige på en fornuftig måde.
Hvis du enabler "CompletionChar" (skriv "help cmd" i en kommando-prompt for at finde ud af hvordan) kan du lave "Completion" på path'en til backup når der spørges.

Jeg har lært bat-programering ved at læse den hjælp man kan få til kommandoerne ved at skrive "help for" i en kommando prompt, læse andres scripts og så prøve mig frem.

http://home20.inet.tele.dk/midgaard/l6.zip
Avatar billede 2400nv Nybegynder
26. august 2003 - 13:14 #17
Log-filen kører som den skal nu. Fint at defaultset.cmd filen er fjernet.

Hvis scriptet tager doc&set-drev fra %USERPROFILE%, skal det vel ikke spørge om "Indtast Documents and Settings drev"? Scriptet finder vel nu selv, hvilke drev Documents and Settings ligger, ik´?

Lad os droppe det med at browse til filen. Kan vi ikke bare bruge f.eks. default for backup og give mulighed for at indtaste et nyt, ved at skrive dette inden ens valg "Tast enter, hvis du bruge [dette drev] ellers indtast et nyt".

Jeg kigger lige på "help cmd" og "help for ....". Kender du til nogle gode Internetsider eller nogle gode bøger om emnet?
Avatar billede bertelbrander Novice
26. august 2003 - 17:43 #18
Jeg har ikke tid lige nu, men hvis du gerne vil lære at lave bat-scripts kunne du jo starte med at prøve at lave rettelserne selv. Så vidt jeg lige kan se burde det være forholdsvis let.

Jeg har aldrig læst en bog eller internet sider om batch-programmering.
Det står lidt i windows online hjælp (Start->Hjælp->Start).
Avatar billede 2400nv Nybegynder
26. august 2003 - 18:28 #19
Jeg prøver lige at kigge på det selv. Regner med at du vil hjælpe mig med det sidste, hvis jeg ikke kan finde ud af det selv. Jeg giver det et forsøg!

Mangler lige at få svar på dette, hvis jeg skal prøve selv:
"Hvis scriptet tager doc&set-drev fra %USERPROFILE%, skal det vel ikke spørge om "Indtast Documents and Settings drev"? Scriptet finder vel nu selv, hvilke drev Documents and Settings ligger, ik´?"
Avatar billede bertelbrander Novice
26. august 2003 - 20:10 #20
Jo, scriptet finder selv ud af drevet for doc&set, det sker i linien:
set DefaultDocAndSet=%USERPROFILE:~0,1%

"funktionen" :GetDocDrive spørger efter doc&set drev, så du kan fjerne kaldene til denne og funktionen selv.
Avatar billede 2400nv Nybegynder
26. august 2003 - 20:50 #21
Jeg prøver mig lidt frem.

Jeg skal slette denne hele "funktion" :GetDocDrive og der hvor der står  call :GetBackupDrive

Hvad skal jeg så? Jeg skal vel bruge "set DefaultDocAndSet=%USERPROFILE:~0,1%" i stedet for :GetDocDrive, eller hvad?

Jeg kan se at der mangler noget, men jeg ved ikke, hvad jeg skal gøre.
Avatar billede bertelbrander Novice
26. august 2003 - 22:48 #22
Linien med set "DefaultDocAndSet=%USERPROFILE:~0,1%" står øverst så den bliver altid udført.
Det du skal have lavet er, at sætte ToDrive eller FromDrive til DefaultDocAndSet afhængig af om der skal laves en backup eller en restore.

Du kan evt. fjerne DefaultDocAndSet variablen og assigne ToDrive/FromDrive direkte fra %USERPROFILE:~0,1%
Avatar billede 2400nv Nybegynder
27. august 2003 - 00:13 #23
"Kan vi ikke bare bruge f.eks. default for backup og give mulighed for at indtaste et nyt, ved at skrive dette inden ens valg "Tast enter, hvis du bruge [dette drev] ellers indtast et nyt""

Det har jeg fået til at virke!

:GetBackupDrive
Echo Tast enter, hvis du bruge [%DefaultBackup%] ellers indtast et nyt

Kan jeg ikke sætte DefaultDocAndSet=ToDrive eller DefaultDocAndSet=FromDrive under :MainChoice-B og :MainChoice-R? Så behøver jeg ikke rette FromDrive og ToDrive. Skal jeg bruge f.eks. "Set DefaultDocAndSet=FromDrive", eller hvad?

"DefaultDocAndSet=%USERPROFILE:~0,1%" gør at jeg får drev-bogstavet, ik´? F.eks. C eller D, men skal man ikke bruge C:\ og D:\?

Jeg prøver at kigge det imorgen, og ser om jeg kan finde "fejlen"
Avatar billede 2400nv Nybegynder
27. august 2003 - 22:32 #24
Jeg har prøvet mig frem uden større held. Jeg bliver nød til at få lidt mere hjælp, hvis jeg skal få det til at virke.
Avatar billede bertelbrander Novice
27. august 2003 - 23:00 #25
Du burde kunne bruge
set FromDrive=%DefaultDocAndSet%
og
set ToDrive=%DefaultDocAndSet%
Under hhv. backup (MainChoice-B) og restore (MainChoice-R)

Jo, ToFrom/FromDrive skal være c:\ og ikke blot c så du kan rette linien der sætter DefaultDocAndSet til:
set DefaultDocAndSet=%USERPROFILE:~0,3%
DVS tage de første 3 karakterer og ikke blot den første.

Jeg kan godt lave en løsning hvis ikke du får det til at spille.
Avatar billede 2400nv Nybegynder
27. august 2003 - 23:18 #26
Jeg har fået det til at virke nu :-)

Det var næsten som jeg havde gjort. Nu er scriptet som jeg havde tænkt mig. Jeg leger lige med det de næste par dage. Du kunne evt. lige tjekke det, når jeg er færdig.

Takker rigtigt mange gange for hjælpen :-)
Avatar billede 2400nv Nybegynder
29. august 2003 - 17:29 #27
@echo off
setlocal
set DefaultDocAndSet=%USERPROFILE:~0,3%
set DefaultBackup=E:\Backup
if [%temp%]==[] set TempFile=c:\temp.tmp.tmp
if NOT [%temp%]==[] set TempFile=%temp%\temp.tmp.tmp

set PassOver=All Users Default User

:MainMenu
  cls
  set ValidChoice=SBR
  set Choice=
  echo.
  echo    - Hoved menu -
  echo.
  echo  S = Slut
  echo  B = Backup
  echo  R = Restore
  echo.
  set /p Choice=Indtast dit Valg:
  if {%Choice%}=={} goto MainMenu
  call set Test=%%ValidChoice:%Choice:~0,1%=%%
  if "%Test%" EQU "%ValidChoice%" goto MainMenu
goto MainChoice-%Choice:~0,1%

:MainChoice-S
goto :EOF

:MainChoice-B
  set Task=Backup
  set FromDrive=%DefaultDocAndSet%
  call :GetBackupDrive
  set LogTxt=%Task% log: %date% %time%
  set LogTxt=%LogTxt:~0,-3%
  set logFile=%ToDrive%%Task%.txt
goto :SubMenu

:MainChoice-R
  set Task=Restore
  set ToDrive=%DefaultDocAndSet%
  call :GetBackupDrive
  set LogTxt=%Task% log: %date% %time%
  set LogTxt=%LogTxt:~0,-3%
  set logFile=%ToDrive%%Task%.txt
goto :SubMenu

:SubMenu
  cls
  set ValidChoice=SHA
  set Choice=
  set /a Counter=0
  echo.
  echo    - %Task% menu -
  echo.
  echo  S = Slut
  echo  H = Hoved menu
  echo  A = Alle brugere
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 call :WriteSubMenu "%%a"
  )
  echo.
  set /p Choice=Indtast dit Valg:
  if {%Choice%}=={} goto SubMenu
  call set Test=%%ValidChoice:%Choice%=%%
  if "%Test%" EQU "%ValidChoice%" goto SubMenu
  if "%Choice:~0,1%" GTR "9" goto SubChoice-%Choice:~0,1%
  call :FindUser %Choice%
goto SubMenu

:SubChoice-H
goto :MainMenu

:SubChoice-S
goto :EOF

:SubChoice-A
  call :CopyAllUsers
goto :SubMenu

:WriteSubMenu
  set /a Counter+=1
  set Name=%1
  echo  %Counter% = %Name:"=%
  set ValidChoice=%ValidChoice%%Counter%
goto :EOF

:FindUser
  set /a Counter=0
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 call :CopyUser %1 "%%a"
  )
goto :EOF

:CopyUser
  set User=%2
  set User=%User:"=%
  set /a Counter+=1
  if not %Counter% EQU %1 goto :eof

  cls
  echo.
  echo Starter %Task% af "%User%".
  echo.
  echo Tast Ctrl+c for at afbryde.
  echo %LogTxt% > %logFile%
  echo. >>%logFile%
  set /A NumError = 0
  set /A NumFiles = 0
  if exist [%TempFile%] del [%TempFile%]

  echo Kopierer filer fra %FromDrive% til %ToDrive% for %User% >>%logFile%
  echo. >>%logFile%
  xcopy "%FromDrive%Documents and Settings\%User%\Lokale indstillinger\Application Data\Microsoft\Outlook" "%ToDrive%Documents and Settings\%User%\Lokale indstillinger\Application Data\Microsoft\Outlook" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
  call :UpdateStat
  xcopy "%FromDrive%Documents and Settings\%User%\Foretrukne" "%ToDrive%Documents and Settings\%User%\Foretrukne" /s/e /h/k/y/i/f/r/o/c >%TempFile% 2>&1
  call :UpdateStat
  xcopy "%FromDrive%Documents and Settings\%User%\Dokumenter" "%ToDrive%Documents and Settings\%User%\Dokumenter" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
  call :UpdateStat
  xcopy "%FromDrive%Documents and Settings\%User%\Application Data\Microsoft\Address Book" "%ToDrive%Documents and Settings\%User%\Application Data\Microsoft\Address Book" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
  call :UpdateStat
  echo. >>%logFile%
  echo Antal fejl: %NumError% Filer kopieret: %NumFiles% >>%logFile%
  cls
  echo.
  echo Færdig, tryk på en tast!
  pause >nul
  start Notepad %logFile%
goto :EOF

:CopyAllUsers
  cls
  echo.
  echo Starter %Task% af "Alle brugere".
  echo.
  echo Tast Ctrl+c for at afbryde.
  echo %LogTxt% > %logFile%
  echo. >>%logFile%
  set /A NumError = 0
  set /A NumFiles = 0
  if exist [%TempFile%] del [%TempFile%]
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do call :CopyThisUser "%%a"
  echo Antal fejl: %NumError% Filer kopieret: %NumFiles% >>%logFile%
  cls
  echo.
  echo Færdig, tryk på en tast!
  pause >nul
  start Notepad %logFile%
goto :EOF

:GetBackupDrive
set BD=
Echo Tast enter, hvis du bruge [%DefaultBackup%] ellers indtast et nyt
set /P BD=Indtast Backup sti:
if [%BD%]==[] set BD=%DefaultBackup%
if NOT [%BD:~1,1%]==[:] set BD=%BD%:
if NOT [%BD:~-1%]==[\] set BD=%BD%\
if NOT exist %BD%. echo "Du har indtastet en sti som ikke findes, indtast en nyt" & goto GetBackupDrive
if [%Task%]==[Backup] (
  set ToDrive=%BD%
) else (
  set FromDrive=%BD%
)
set BD=
goto :eof

:UpdateStat
for /F %%I in (%TempFile%) do set xxx=%%I
type %TempFile%
type %TempFile%>> %logFile%
del %TempFile%
if [%xxx%]==[0] set /A NumError += 1
if not [%xxx%]==[0] set /A NumFiles += %xxx%
set xxx=
goto :eof

:CopyThisUser
echo  %PassOver% | find %1 >nul
if not errorlevel 1 goto :eof
echo Kopierer filer fra %FromDrive% til %ToDrive% for %~1 >>%logFile%
echo. >>%logFile%
xcopy "%FromDrive%Documents and Settings\%~1\Lokale indstillinger\Application Data\Microsoft\Outlook" "%ToDrive%Documents and Settings\%~1\Lokale indstillinger\Application Data\Microsoft\Outlook" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
xcopy "%FromDrive%Documents and Settings\%~1\Foretrukne" "%ToDrive%Documents and Settings\%~1\Foretrukne" /s/e /h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
xcopy "%FromDrive%Documents and Settings\%~1\Dokumenter" "%ToDrive%Documents and Settings\%~1\Dokumenter" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
xcopy "%FromDrive%Documents and Settings\%~1\Application Data\Microsoft\Address Book" "%ToDrive%Documents and Settings\%~1\Application Data\Microsoft\Address Book" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
echo. >>%logFile%
Avatar billede 2400nv Nybegynder
29. august 2003 - 17:33 #28
Nu kører scriptet som jeg havde tænkt mig. Kan du se nogen ting som skal rettes? Kan du ikke oprette et svar, så du kan få dine point!

Takker endnu en gang for hjælpen :-)
Avatar billede bertelbrander Novice
30. august 2003 - 00:16 #29
Jeg kan ikke se nogle egentlige fejl, kun et par små skønhedspletter:

1: "Funktionen" CopyThisUser bliver kun brugt hvis der skal laves backup/restore for alle brugere, men i funktionen CopyUser laves der stort set det samme, så man kunne med fordel kalde CopyThisUser fra CopyUser. Så slipper man for at rette begge steder hvis der skal rettes i hvad/hvordan der skal kopierers.

2: Funktionen GetBackupDrive henter en hel sti og burde derfor nok hedde GetbackupPath

3: I GetBackupDrive bør " indtast en nyt" rettes til "indtast en ny" og "ellers indtast et nyt" rettes til "ellers indtast et ny".

Jeg forsøger at undgå point...
Avatar billede 2400nv Nybegynder
30. august 2003 - 00:26 #30
Jeg prøver lige selv og rette tingene. Giv mig lige en dag eller dag, da jeg ikke er 100% inde i det endnu.

Kan du ikke rette det sidste (en færdig version), så jeg er sikker på at det ikke kan blive bedre.

Lad mig lige selv prøve og se, hvor langt jeg kommer.
Avatar billede 2400nv Nybegynder
31. august 2003 - 00:08 #31
Det er nok bedst at du retter scriptet, da jeg stædigvæk kører lidt rundt i det. Jeg har fået en større forståelse af hvad scriptet gør, men har lidt svær ved at rette i det endnu.
Avatar billede bertelbrander Novice
31. august 2003 - 01:37 #32
Avatar billede 2400nv Nybegynder
31. august 2003 - 19:29 #33
Perfekt. Takker mange gange.

"Jeg forsøger at undgå point..." du har fortjent alle pointene...vil du ikke have de 100 point?????
Avatar billede bertelbrander Novice
31. august 2003 - 20:14 #34
Nej, jeg vil helst ikke have point.
Avatar billede 2400nv Nybegynder
31. august 2003 - 20:25 #35
Okay, så tager jeg dem selv. Jeg har prøvet scriptet et par gange og det kører bare :-)

Bare en lille ting, scriptet viser hvilke filer som bliver kopieret, når man kører scriptet, kan man få det til ikke at vise hvilke filer der bliver kopieret?
Avatar billede bertelbrander Novice
01. september 2003 - 00:13 #36
Du skal fjerne linien:
type %TempFile%
I funktionenen :UpdateStat hvis du vil slippe for at den udskriver på skærmen. Linien efter (type %TempFile%>> %logFile%") er ansvarlig for at det bliver skrevet til logfilen.
Avatar billede bertelbrander Novice
01. september 2003 - 01:52 #37
Ups, det var ikke meningen at det skulle have været et svar.
Jeg fastholder at jeg ikke ønsker point.
Avatar billede 2400nv Nybegynder
02. september 2003 - 17:22 #38
Lukker
Avatar billede 2400nv Nybegynder
06. oktober 2003 - 14:51 #39
Jeg har kørt med scriptet en del, men jeg synes der mangler en lille ting. Når man laver "backup", og angiver en sti som ikke findes, så skal man indtaste en ny.

Kunne man ikke få scriptet til at oprette mappen i sted for?

Ellers kører scriptet fint!
Avatar billede bertelbrander Novice
06. oktober 2003 - 21:48 #40
Du skal putte følgende i bunden af bat-filen:

goto :eof

:VerifyBackup
if exist %1. goto :eof
if [%task%]==[Restore] echo "Du har indtastet en sti som ikke findes, indtast en ny" & goto :eof
set Answer=
set /P Answer=Stien %1 findes ikke skal den oprettes?
if [Answer]==[n] goto :eof
md %1 >nul 2>&1
if not exist %1. echo Kunne ikke oprette stien %1

Derudover skal du erstatte linien "if NOT exist %BD%. echo "Du har indtastet en sti som ikke findes, indtast en ny" & goto GetBackupPath" i :GetBackupDrive med:

call :VerifyBackup %BD%
if not exist %BD%. goto :GetBackupDrive

Den vil så spørge om du vil oprette stien hvis den ikke findes, og forsøge at oprette denne, medmindre du svarer n
Avatar billede 2400nv Nybegynder
07. oktober 2003 - 16:55 #41
Jeg har indsæt den ekstra kode i scriptet.

Den opretter en mappe, hvis den ikke findes. Men hvis man svarer n til om der skal oprettes en mappe, så gør den det alligevel. Jeg har gjort noget forkert?

Kan man ikke efter "findes ikke skal den oprettes?" give hvilke valgmuligheder man har? F.eks. (Ja/Nej) eller hvordan man nu skriver det. Når man svarer alt andet end n, så opfatter scriptet det bare som et Ja. Kan man ikke give svarmuligheder J for JA og N for Nej?

Ellers er det fedt, at den opretter mappen, hvis den ikke findes i forvejen.
Avatar billede bertelbrander Novice
07. oktober 2003 - 23:46 #42
Det gik vist for hurtigt med den rettelse:

Linien:
if [Answer]==[n] goto :eof

Skal naturligvis laves om til:

if [%Answer%]==[n] goto :eof

Du kan angive hvilke svar muligheder du vil give brugeren ved at:
1: Ændre linien:
set /P Answer=Stien %1 findes ikke skal den oprettes?

2: Tilføje en linie for hver mulighed der skal gælde for nej efter linien med:
if [%Answer%]==[n] goto :eof

f.ex:
if [%Answer%]==[n] goto :eof
if [%Answer%]==[N] goto :eof
if [%Answer%]==[Nej] goto :eof

Du kan også få if til at se bort for forskellem mellem store og små bogstaver vha:
if /I [%Answer%]==[n] goto :eof

Du kan også få den til kun at acceptere gyldige svar ved at tilføje, følgende efter "if [%Answer%]==[n] goto :eof" linierne:

if /I [%Answer%]==[ja] goto AnswerOk
if /I [%Answer%]==[j] goto AnswerOk
echo Ugyldig svar &goto :VerifyBackup
:AnswerOk

Alt i alt kan man erstatte linierne fra mit sidste indlæg med:

goto :eof

:VerifyBackup
if exist %1. goto :eof
if [%task%]==[Restore] echo "Du har indtastet en sti som ikke findes, indtast en ny" & goto :eof
set Answer=
set /P Answer=Stien %1 findes ikke skal den oprettes [Ja/Nej]?
if /I [%Answer%]==[n] goto :eof
if /I [%Answer%]==[nej] goto :eof
if /I [%Answer%]==[j] goto :AnswerOk
if /I [%Answer%]==[ja] goto :AnswerOk
echo Ugyldig svar &goto :VerifyBackup

:AnswerOk
md %1 >nul 2>&1
if not exist %1. echo Kunne ikke oprette stien %1
Avatar billede 2400nv Nybegynder
09. oktober 2003 - 23:05 #43
Jeg kan ikke rigtigt få det til at køre.

Jeg har puttet disse linier sidst i scriptet
goto :eof

:VerifyBackup
if exist %1. goto :eof
if [%task%]==[Restore] echo "Du har indtastet en sti som ikke findes, indtast en ny" & goto :eof
set Answer=
set /P Answer=Stien %1 findes ikke skal den oprettes [Ja/Nej]?
if /I [%Answer%]==[n] goto :eof
if /I [%Answer%]==[nej] goto :eof
if /I [%Answer%]==[j] goto :AnswerOk
if /I [%Answer%]==[ja] goto :AnswerOk
echo Ugyldig svar &goto :VerifyBackup

:AnswerOk
md %1 >nul 2>&1
if not exist %1. echo Kunne ikke oprette stien %1

Så har jeg erstattet: 

"if NOT exist %BD%. echo "Du har indtastet en sti som ikke findes, indtast en ny" & goto GetBackupPath" i :GetBackupDrive med:

call :VerifyBackup %BD%
if not exist %BD%. goto :GetBackupDrive

Der er ikke noget i scriptet som hedder :GetBackupDrive, så det kan være der hvor fejlen ligger, da jeg kan erstattet linien i :GetBackupPath
Avatar billede bertelbrander Novice
09. oktober 2003 - 23:19 #44
Hvad sker der når du kører?

:GetBackupDrive blev på et tidspunkt omdøbt til :GetBackupPath (eller var det omvendt?).

Prøv evt. at poste hele scriptet, som det ser ud nu.
Avatar billede 2400nv Nybegynder
09. oktober 2003 - 23:24 #45
@echo off
setlocal
set DefaultDocAndSet=%USERPROFILE:~0,3%
set DefaultBackup=E:\Backup
if [%temp%]==[] set TempFile=c:\temp.tmp.tmp
if NOT [%temp%]==[] set TempFile=%temp%\temp.tmp.tmp

set PassOver=All Users Default User

:MainMenu
  cls
  set ValidChoice=SBR
  set Choice=
  echo.
  echo    - Hoved menu -
  echo.
  echo  S = Slut
  echo  B = Backup
  echo  R = Restore
  echo.
  set /p Choice=Indtast dit Valg:
  if {%Choice%}=={} goto MainMenu
  call set Test=%%ValidChoice:%Choice:~0,1%=%%
  if "%Test%" EQU "%ValidChoice%" goto MainMenu
goto MainChoice-%Choice:~0,1%

:MainChoice-S
goto :EOF

:MainChoice-B
  set Task=Backup
  set FromDrive=%DefaultDocAndSet%
  call :GetBackupPath
  set LogTxt=%Task% log: %date% %time%
  set LogTxt=%LogTxt:~0,-3%
  set logFile=%ToDrive%%Task%.txt
goto :SubMenu

:MainChoice-R
  set Task=Restore
  set ToDrive=%DefaultDocAndSet%
  call :GetBackupPath
  set LogTxt=%Task% log: %date% %time%
  set LogTxt=%LogTxt:~0,-3%
  set logFile=%ToDrive%%Task%.txt
goto :SubMenu

:SubMenu
  cls
  set ValidChoice=SHA
  set Choice=
  set /a Counter=0
  echo.
  echo    - %Task% menu -
  echo.
  echo  S = Slut
  echo  H = Hoved menu
  echo  A = Alle brugere
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 call :WriteSubMenu "%%a"
  )
  echo.
  set /p Choice=Indtast dit Valg:
  if {%Choice%}=={} goto SubMenu
  call set Test=%%ValidChoice:%Choice%=%%
  if "%Test%" EQU "%ValidChoice%" goto SubMenu
  if "%Choice:~0,1%" GTR "9" goto SubChoice-%Choice:~0,1%
  call :FindUser %Choice%
goto SubMenu

:SubChoice-H
goto :MainMenu

:SubChoice-S
goto :EOF

:SubChoice-A
  call :CopyAllUsers
goto :SubMenu

:WriteSubMenu
  set /a Counter+=1
  set Name=%1
  echo  %Counter% = %Name:"=%
  set ValidChoice=%ValidChoice%%Counter%
goto :EOF

:FindUser
  set /a Counter=0
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do (
    echo  %PassOver% | find "%%a" >nul
    if errorlevel 1 call :CopyUser %1 "%%a"
  )
goto :EOF

:CopyUser
  set User=%2
  set User=%User:"=%
  set /a Counter+=1
  if not %Counter% EQU %1 goto :eof

  cls
  echo.
  echo Starter %Task% af "%User%".
  echo.
  echo Tast Ctrl+c for at afbryde.
  echo %LogTxt% > %logFile%
  echo. >>%logFile%
  set /A NumError = 0
  set /A NumFiles = 0
  if exist [%TempFile%] del [%TempFile%]
  call :CopySingleUser "%User%"
  echo Antal fejl: %NumError% Filer kopieret: %NumFiles% >>%logFile%
  cls
  echo.
  echo Færdig, tryk på en tast!
  pause >nul
  start Notepad %logFile%
goto :EOF

:CopyAllUsers
  cls
  echo.
  echo Starter %Task% af "Alle brugere".
  echo.
  echo Tast Ctrl+c for at afbryde.
  echo %LogTxt% > %logFile%
  echo. >>%logFile%
  set /A NumError = 0
  set /A NumFiles = 0
  if exist [%TempFile%] del [%TempFile%]
  for /f "delims=" %%a in ('dir /A:D/B "%FromDrive%Documents and Settings/"') do call :CopyThisUser "%%a"
  echo Antal fejl: %NumError% Filer kopieret: %NumFiles% >>%logFile%
  cls
  echo.
  echo Færdig, tryk på en tast!
  pause >nul
  start Notepad %logFile%
goto :EOF

:GetBackupPath
set BD=
Echo "Tast enter, hvis du bruger [%DefaultBackup%] ellers indtast en ny"
set /P BD=Indtast Backup sti:
if [%BD%]==[] set BD=%DefaultBackup%
if NOT [%BD:~1,1%]==[:] set BD=%BD%:
if NOT [%BD:~-1%]==[\] set BD=%BD%\
call :VerifyBackup %BD%
if not exist %BD%. goto :GetBackupDrive
if [%Task%]==[Backup] (
  set ToDrive=%BD%
) else (
  set FromDrive=%BD%
)
set BD=
goto :eof

:UpdateStat
for /F %%I in (%TempFile%) do set xxx=%%I
type %TempFile%
type %TempFile%>> %logFile%
del %TempFile%
if [%xxx%]==[0] set /A NumError += 1
if not [%xxx%]==[0] set /A NumFiles += %xxx%
set xxx=
goto :eof

:CopyThisUser
echo  %PassOver% | find %1 >nul
if not errorlevel 1 goto :eof
:CopySingleUser
echo Kopierer filer fra %FromDrive% til %ToDrive% for %~1 >>%logFile%
echo. >>%logFile%
xcopy "%FromDrive%Documents and Settings\%~1\Lokale indstillinger\Application Data\Microsoft\Outlook" "%ToDrive%Documents and Settings\%~1\Lokale indstillinger\Application Data\Microsoft\Outlook" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
xcopy "%FromDrive%Documents and Settings\%~1\Foretrukne" "%ToDrive%Documents and Settings\%~1\Foretrukne" /s/e /h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
xcopy "%FromDrive%Documents and Settings\%~1\Dokumenter" "%ToDrive%Documents and Settings\%~1\Dokumenter" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
xcopy "%FromDrive%Documents and Settings\%~1\Application Data\Microsoft\Address Book" "%ToDrive%Documents and Settings\%~1\Application Data\Microsoft\Address Book" /s/e/h/k/y/i/f/r/o/c >%TempFile% 2>&1
call :UpdateStat
echo. >>%logFile%
goto :eof

:VerifyBackup
if exist %1. goto :eof
if [%task%]==[Restore] echo "Du har indtastet en sti som ikke findes, indtast en ny" & goto :eof
set Answer=
set /P Answer=Stien %1 findes ikke skal den oprettes [Ja/Nej]?
if /I [%Answer%]==[n] goto :eof
if /I [%Answer%]==[nej] goto :eof
if /I [%Answer%]==[j] goto :AnswerOk
if /I [%Answer%]==[ja] goto :AnswerOk
echo Ugyldig svar &goto :VerifyBackup

:AnswerOk
md %1 >nul 2>&1
if not exist %1. echo Kunne ikke oprette stien %1
Avatar billede bertelbrander Novice
09. oktober 2003 - 23:37 #46
I funktionen :GetBackupPath skal linien:

if not exist %BD%. goto :GetBackupDrive

rettes til:

if not exist %BD%. goto :GetBackupPath
Avatar billede 2400nv Nybegynder
09. oktober 2003 - 23:45 #47
Det hjælp !

Kigger lige på det i morgen og ser, om der er andet som skal rettes.
Avatar billede 2400nv Nybegynder
10. oktober 2003 - 10:00 #48
Det kører fint. Jeg har bare for sjov, svaret nej til oprettelse af ny mappe. Jeg ved ikke om, man kunne lave det på en anden måde. F.eks. bare tilbage til starten af hovedmenuen eller en anden løsning (ved ikke lige hvad det skulle være, men du har måske en idé?). 


  - Hoved menu -

S = Slut
B = Backup
R = Restore

Indtast dit Valg:b
"Tast enter, hvis du bruger [E:\Backup] ellers indtast en ny"
Indtast Backup sti:e:\123
Stien e:\123\ findes ikke skal den oprettes [Ja/Nej]?n
"Tast enter, hvis du bruger [E:\Backup] ellers indtast en ny"
Indtast Backup sti:e:\1234
Stien e:\1234\ findes ikke skal den oprettes [Ja/Nej]?n
"Tast enter, hvis du bruger [E:\Backup] ellers indtast en ny"
Indtast Backup sti:
Avatar billede bertelbrander Novice
11. oktober 2003 - 20:00 #49
Jeg har lidt travlt pt. men jeg skal nok lave en løsning om nogle dage.
Avatar billede 2400nv Nybegynder
13. oktober 2003 - 17:24 #50
Det er bare i orden!
Avatar billede 2400nv Nybegynder
16. oktober 2003 - 21:23 #51
Har du fundet en løsning?
Avatar billede bertelbrander Novice
16. oktober 2003 - 22:58 #52
Jeg kikker på det en gang i weekenden.
Avatar billede bertelbrander Novice
19. oktober 2003 - 00:13 #53
Jeg har lavet en ny version hvor følgende valg gives hvis den backup sti man har angivet ikke findes:

Ja, hvis man ønsker at (forsøge at) oprette stien
Nej, hvis man ønsker at indtaste en ny sti
Fortryd, hvis man vil tilbage til hovedmenu'en

Alle tre kan vælges med første bogstav eller hele ordet.

Den kan downloades her:

http://home20.inet.tele.dk/midgaard/bu.zip
Avatar billede 2400nv Nybegynder
19. oktober 2003 - 14:12 #54
Jeg har prøvet det nye script, og det virker helt fint. Bare for at være besværlig, kan du ikke lave det sådan, at det også virker når man vælger restore.

En anden meget lille ting, kan der ikke være mellemrum mellem egen valg.

"Stien e:\123\ findes ikke skal den oprettes [Ja/Nej]?n
"Tast enter, hvis du bruger [E:\Backup] ellers indtast en ny"
Indtast Backup sti:e:\1234"

Da scriptet er blevet uoverskuelig for mig, så håber du lige vil lave det sidste her. Takker mange gange for det store arbejde, du har lagt i dette script (projekt).
Avatar billede bertelbrander Novice
19. oktober 2003 - 14:18 #55
Når man vælger restore er det nødvendigt at backup mappen findes, ellers er der ikke noget at restore fra. Jeg har så ment at der ikke er nogen grund til at spørge brugeren om han vil have mappen oprettet når han vælger restore og angiver en mappe der ikke findes.

Jeg vil kikke på mellemrummene i aften.
Avatar billede 2400nv Nybegynder
19. oktober 2003 - 14:27 #56
Der skal selvfølgelig ikke oprettes en mappen, når man restore. Men man kan jo kunne til at angiv en forkert sti, så valget skal nok bare være: intast en ny eller fortryd.
Avatar billede bertelbrander Novice
19. oktober 2003 - 16:14 #57
Ok.
Avatar billede bertelbrander Novice
20. oktober 2003 - 00:05 #58
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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