Avatar billede jpi Mester
22. juli 2003 - 11:19 Der er 23 kommentarer og
1 løsning

Errorlevel ved Copy

Jeg har skrevet følgende bat-fil som jeg ikke kan få til at virke...

copy c:\test.txt c:\temp
if errorlevel 0 echo OK
if not errorlevel 0 echo FEJL
echo %errorlevel%

Når jeg kører filen skriver den altid OK, selvom filen ikke bliver kopieret (f.eks. når den ikke er der).  Errorlevel er i den situation 1, for det viser den nederste kommando...
Avatar billede jnoval Nybegynder
22. juli 2003 - 11:29 #1
copy c:\test.txt c:\temp
if errorlevel 0 echo OK
if errorlevel 1 echo FEJL
echo %errorlevel%

Dette virker hos mig på windows 2000
Avatar billede jpi Mester
22. juli 2003 - 11:34 #2
På min Win2000 er der følgende, hvis filen ikke eksisterer(jeg har tilføjet @echo off i starten af bat-filen):

Den angivne fil blev ikke fundet
OK
FEJL
1

Hvordan kan det være at den både viser OK og fejl ???
Avatar billede jpi Mester
22. juli 2003 - 11:42 #3
Følgende har vist sig at virke i Win2000

copy c:\test.txt c:\temp
if not errorlevel 1 echo OK
if errorlevel 1 echo FEJL
echo %errorlevel%

MEN, det virker IKKE under win95, og det er der jeg skal bruge bat-filen.
Der bliver resultatet af ovenstående altid "OK", uanset om filen findes og kopieres eller ikke findes og deraf ikke kopieres...
Avatar billede jnoval Nybegynder
22. juli 2003 - 11:43 #4
Jeg får det sammesom dig. Jeg ved ikke hvorfor.
Dette skulle klare det problem:

@echo off
copy c:\test.txt c:\temp
if errorlevel 1 goto fejl
if errorlevel 0 goto ok
goto end

:ok
echo ok
echo %errorlevel%
goto end

:fejl
echo fejl
echo %errorlevel%
goto end

:end
Avatar billede jpi Mester
22. juli 2003 - 11:48 #5
Jeg vil lige afprøve det, men mit problem er at selve copy-kommandoen skal stå mange gange i bat-filen for at kopiere en fil ud til mange computere på et netværk. Efter batfilen er kørt, skal man kunne se i en log-fil hvilke computere der ikke har modtaget filen. Derudover skal man på slærmen kunne følge med i hvor langt man er nået.
Hvis man laver en goto-sætning, bliver man nødt til at lave en til hver computer, så man kan komme tilbage og fortsætte bat-filen.
Det er lidt bøvlet, men måske er det eneste mulighed ?
Avatar billede jpi Mester
22. juli 2003 - 11:55 #6
I WIN95 er det ikke muligt at få den til at komme med "fejl"
Kommandoen echo %errorlevel% virker ikke den skriver bare "ECHO is off", variablerne-% er ikke med i WIN95 ?

Nogen der ved hvordan man får det til at virke i WIN95 ???
Avatar billede jnoval Nybegynder
22. juli 2003 - 12:35 #7
Kan du ikke lave en form for loop. i dit script?
Hvis de computere har en navngivning der er et fortløbende nr f.eks. pc01, pc02, pc03, så kan man måske lave en tæller i dene stil:
count=count+1
Set computer=pc%count%

copy fil.xxx \\%computer%\dest.

En lille fidus med goto er:
goto answer%ERRORLEVEL%
:answer0
echo Program had return code 0
:answer1
echo Program had return code 1

Er det alle former for %-variabler der ikke virker i win95?
echo %errorlevel% er der vel ikke brug for, du kender errorlevel hvis du møder echo fejl.
Er det den computer du skal køre scriptet på der er en win95, eller er det clienterne?
Avatar billede jpi Mester
22. juli 2003 - 13:05 #8
Det ser ud til at %-variable ikke virker, eller også kan jeg ikke huske hvordan man gør !

Dit lille fidus med goto, ser OK-smart ud, men desværre kan WIN95 ikke finde ud af det :-( (Den kan ikke finde label'en.) Derfor tror jeg at %-variabæe ikke virker helt som det skal. Elle som det gjorde tilbage i DOS 6.22...

Alle PC'er har WIN95.
Avatar billede jnoval Nybegynder
22. juli 2003 - 18:51 #9
Har du ikke mulighed for at køre scriptet på en win2000 maskine. Jeg tror ikke at det har nogen betydning at clienterne kører win95?
En anden mulighed var at lave en boot cd med dos og så køre scriptet herfra. Du kan f.eks. benytte www.freedos.org. Jeg har ingen erfaringer med denne dos, men den er ms-dos kompatibel.
Avatar billede jnoval Nybegynder
22. juli 2003 - 18:59 #10
Nu da du skal kopiere over netværk skal dos'en selvfølgelig opsættes til at understøtte netværk.
Hvis du ikke er skrap til netværk og dos, så kan du finde hjælp på nettet. www.google.com er din ven, søg Network Boot Disk.
Avatar billede bertelbrander Novice
25. juli 2003 - 01:50 #11
Linien:
if errorlevel 0 goto whatever
skal læses som: "Hvis errorlevel er større end eller lig med 0, så gå til whatever. Errorlevel er altid større end eller lig med 0.
Så man skal starte med at teste fra høj nummer og nedad:
if errorlevel 5 goto level_5_error
if errorlevel 4 goto level_4_error
...
Avatar billede jnoval Nybegynder
25. juli 2003 - 11:02 #12
Hej jpi

Jeg kan forstå på dit andet spørgsmål (http://www.eksperten.dk/spm/378445) at du fik klaret en løsning. Lad os få løsningen.
Avatar billede jpi Mester
25. juli 2003 - 11:03 #13
Bertelbrander:
Du har ret mht rækkefølgen i if errorlevel-sætningerne. Dette hjalp mig desværre ikke umiddelbart videre, da jeg havde prøvet at bytte om på if sætningerne.

Jeg havde dog en mistanke til errorlevel, da jeg et sted læste at det jo er forfatteren af programmet, der afgør hvilken errorlevel der returneres hvornår. Derfor var jeg interesseret i at finde ud af errorlevel hva echo %errorlevel%. Men efter nogen tids test og brug af xcopy i stedet for copy, har det vist sig at copy slet ikke returnerer noget errorlevel ! (I hvert fald i den ver. af WIN95 jeg bruger) Uanset om filen fandtes eller ej returnerede den 0. Men hvis jeg én gang lavede en xcopy, hvor den fejlede, så kom der en errorlevel 1 på alle efterfølgende copy-kommandoer. Errorlevel blev altså ikke ændret af copy.

Konklusion: Ved brug af xcopy i stedet virker det...

jnoval:
Tak for de mange forskellige fejlmuligheder du kom med. Dem får du point for
Avatar billede jpi Mester
25. juli 2003 - 11:04 #14
Hurtigere kunne jeg ikke skrive det ... 21 sek.
Avatar billede jnoval Nybegynder
25. juli 2003 - 11:12 #15
Takker for point. Undskyld jeg var lidt hurtig på aftrækkeren. Toldmodighed er en dyd.
Jeg kan også bedre lide at bruge xcopy. Den har også mange flere muligheder. Underligt at de ikke bare udbyggede copy i stedet for at lave xcopy:-)
Avatar billede jpi Mester
25. juli 2003 - 11:14 #16
Jeg brugte også xcopy mest, dengang i de glade DOS-dage, men da det var en ganske enkelt copy-funktion skænkede jeg det ikke en tanke. Men så er man blevet klogere...
Avatar billede knudemand Nybegynder
18. august 2003 - 18:42 #17
xcopy har den ulempe, at det er en ekstern kommando, dvs den er ikke indbygget i kommandofortolkeren. Har du kun "en bar røv at trutte i" og ikke vil inkludere xcopy.exe på din diskette (eller hvorfra du udfører kommandoen) eller forsøge at finde stien til den, så er der fornuft i at bruge copy kommandoen.

Du kunne have overvejet følgende:
if exist fil.txt copy fil.txt c:\dest
if not exist fil.txt echo kunne ikke finde fil.txt >> log.txt
Avatar billede jpi Mester
19. august 2003 - 08:17 #18
Du har ret mht extern kommando, men dit forslag med at bruge exist fil.txt er ikke brugbar for mig, da det er selve kopieringen der skal "logges", dvs. hvis destinationscomputeren f.eks. ikke er tændt, skal jeg få en fejl, om at den ikke er blevet kopieret til den computer.

Hvis jeg kun har en "bar røv at trutte i" så har jeg heller ikke forbindelse til resten at netværket, og så er kopieringen ikke aktuel alligevel.

Men tak for tippet ;-)
Avatar billede netpxg Nybegynder
19. august 2003 - 08:49 #19
Echo sætter nok også errorlevel så hvis errorlevel er 1 vil "if errorlevel 1 echo FEJL" sætte errorlevel til 0. Med EXIST som knudemand foreslår, kan du undgå errorlevel og udvide din copy med næsten alle tænkelige check.
Avatar billede jpi Mester
19. august 2003 - 09:30 #20
Jeg har nu ikke oplevet at echo sætter nogen errorlevel, derimod sætter copy ingen errorlevel (i hvert fald ikke i WIN95), men muligvis har i ret.
Min BAT-fil virker i hvert fald som den skal, så deeeeet... ;-)
Avatar billede knudemand Nybegynder
19. august 2003 - 09:39 #21
hmmmm, hvis jeg ville være sikker på at source og destination var 100% ens ville jeg:
fc c:\dir d:\dir >> log.txt
Så får du en binær sammenligning af alle filer, og en fejl hvis en fil mangeler i destinationen.
Avatar billede jpi Mester
19. august 2003 - 09:56 #22
Det kan du have ret i...
Avatar billede knudemand Nybegynder
19. august 2003 - 10:10 #23
den eksotiske afslutningstest ...ok, mest lavet for at blære mig med for-kommandoen, som de flest vist har glemt :-)
kommendoen skal ligge i sourcemappen, og skal fyres af i en batch-fil. Fra kommandoprompt, skal %%a erstattes med %a

for %%a in (*.*) do if not exist h:\1\"%%a" echo "%%a" mangler i destinationsfolder >> log.txt
Avatar billede jpi Mester
19. august 2003 - 11:06 #24
:-)
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