Toon posts:

[Batch] Probleem met "SETLOCAL" commando.

Pagina: 1
Acties:
  • 180 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goede dag allen.

Ik heb een probleem met een scriptje van mij. Het is een redelijk simpel script, maar hij geeft toch een foutmelding die ik niet helemaal snap.

Elke keer dat ik mijn script uitvoer krijg ik: (script staat onderaan voor overzichtelijkheid)
"Het maximale recursieniveau voor SETLOCAL is bereikt."

Nu heb ik al geprobeerd om met Google een oplossing te vinden, wat niet is gelukt. Ik heb ook geprobeerd SETLOCAL gewoon helemaal weg te halen uit mijn script, dan doet hij niks meer. Ik weet gewoon niet meer wat ik moet doen, en ik wil hier toch wel verder mee, ik vind het namelijk wel interessant.

Ik sta open voor suggesties en vragen voor verdere info. Gewoon hier een berichtje plaatsen, dan zal ik het zeker vandaag of morgen nog lezen.

Script:

@echo off
SETLOCAL

SET _source="c:\documents and settings\casper willemsen\mijn documenten\test mapje"

SET _dest="c:\documents and settings\casper willemsen\mijn documenten\test destination"

SET _what=/e /copyall /maxage:4 /zb
:: /e :: Copy everything including empty subfolders
:: /copyall :: Copy ALL file info
:: /maxage:4 :: The copy will exclude all files older than 4 days
:: /zb :: Use restartable mode; if access denied use Backup mode

SET _options=/r:5 /w:1 /log:testlog.txt
:: /r:n :: Number of retries
:: /w:n :: Wait time between retries
:: /log :: Output log file

ROBOCOPY %_source% %_dest% %_what% %_options%

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-03 14:48

André

Analytics dude

Ik verplaats hem even naar Windows Clients ;)

[ Voor 19% gewijzigd door André op 28-09-2006 09:52 ]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Roep je het toevalig weer aan in een ander batchfile? Hoe dan ook wil je SETLOCAL weer uitschakelen middels ENDLOCAL. En je zou ook het SETLOCAL gewoon moeten kunnen vergeten als je de batchfile gewoon dubbelklikt (en je dus vanzelf al lokale variabelen gebruikt). Wat gebeurt er aan foutmeldingen als je het vanaf de prompt uitvoert? <-- kijk ook wat een echo %variabele% geeft.

[ Voor 21% gewijzigd door F_J_K op 28-09-2006 16:40 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
F_J_K schreef op donderdag 28 september 2006 @ 16:39:
Roep je het toevalig weer aan in een ander batchfile? Hoe dan ook wil je SETLOCAL weer uitschakelen middels ENDLOCAL. En je zou ook het SETLOCAL gewoon moeten kunnen vergeten als je de batchfile gewoon dubbelklikt (en je dus vanzelf al lokale variabelen gebruikt). Wat gebeurt er aan foutmeldingen als je het vanaf de prompt uitvoert? <-- kijk ook wat een echo %variabele% geeft.
Voor zover ik weet roep ik het niet aan in een andere batchfile, aangezien ik alleen deze gebruik.

Als ik dubbelklik op het batchbestand dan krijg ik nog steeds de fout met SETLOCAL, als ik dat eruit haal krijg ik een zwart scherm met een knipperende cursor. Hij doet niks, geeft geen foutmelding, helemaal niks.

Als ik ENDLOCAL onderaan neerzet, krijg ik nog steeds de fout dat het maximale recursieniveau is bereikt.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Dus doe het even vanaf de prompt (start - run - cmd) en copy/paste regel voor regel, dan zie je beter wat er gebeurt.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
F_J_K schreef op vrijdag 29 september 2006 @ 08:59:
Dus doe het even vanaf de prompt (start - run - cmd) en copy/paste regel voor regel, dan zie je beter wat er gebeurt.
Ik heb al wel 1 foutje gevonden en verholpen. Hij bleef het batch bestand maar draaien omdat het bestand "robocopy.bat" heette. Nu heb ik het anders genoemd, alles behalve @echo off erin staan, en nu geeft hij alleen maar de commando's uit het batch bestand weer. Hij geeft de fout met SETLOCAL in ieder geval niet meer aan, maar het werkt nog steeds niet helemaal zoals het zou moeten werken. Hij kopieërt namelijk de bestanden nog niet.

Het regel voor regel invoeren heb ik ook geprobeerd, maar dan geeft hij niet aan wat er gebeurt. Je krijgt alleen een regel niks, en dan weer het commando prompt.

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

even uit pure gekkigheid: gebruik je command.com hierbij of cmd.exe?

Ik heb wel eens gemerkt dat command.com zich af en toe niet echt weet te gedragen...

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Verwijderd

Topicstarter
Ik heb gewoon een apart .bat bestand aangemaakt, voor de rest gebruik ik er helemaal niks bij.

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ok die recursie is duidelijk: Je denkt dat bij de laatste regel ROBOCOPY wordt gestart, maar omdat je geen extensie meestuurt, gaat hij eerst ROBOCOPY.BAT starten (zichzelf dus), ook al staat ROBOCOPY.EXE in diezelfde map.
Zo werden vroeger ook regelmatig simpele windows virussen geschreven, gewoon een .BAT bestand met dezelfde naam als een .EXE in een map knikkeren en op het moment dat dat programma aangeroepen wordt zonder extensie, ben je de sjaak.
• SETLOCAL is niet nodig, kan weg.
• ROBOCOPY.EXE aanpassen in de laatste regel, dan kun je je BAT-bestand ook gewoon ROBOCOPY.BAT blijven noemen.
• Pad naar ROBOCOPY toevoegen met quotes als die EXE niet in dezelfde map staat als dat BAT-bestand. Dus iets van "%ProgramFiles%\naam van Robocopymap\robocopy.exe" of zo

500 "The server made a boo boo"


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

De vraag is dus hoe je een prompt opent, via start -> cmd, via programma's -> "command prompt" of iets anders?
Maar goed, de originele foutmelding is hiermee duidelijk: je was recursief bezig door robocopy aan te roepen met robocopy en dan krijg je een rondje. Door te hernoemen ben je dus al een heel eind.

Een prompt na elke opdracht is ook logisch, pas de laatste stap doet iets dat meer dan een halve milliseconde duurt.
Vraag is dus even wat de laatste regel doet; robocopy zelf. De rest is gewoon de parameters.
Domme vraag: "c:\documents and settings\casper willemsen\mijn documenten\test mapje" is gevuld en .\test destination bestaat maar is leeg?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Oh ja, het kan inderdaad zijn dat er iets fout gaat met robocopy zelf. Wat staat er in testlog.txt? Aangezien je dat als Output log file hebt ingesteld, komen fouten van robocopy niet op het scherm, maar worden naar dit bestandje gestuurd

500 "The server made a boo boo"


Verwijderd

Topicstarter
Ten eerste, sorry dat ik niet eerder heb gereageerd, maar had thuis geen internet dit weekend.
Vaan_Banaan schreef op vrijdag 29 september 2006 @ 14:57:
Ok die recursie is duidelijk: Je denkt dat bij de laatste regel ROBOCOPY wordt gestart, maar omdat je geen extensie meestuurt, gaat hij eerst ROBOCOPY.BAT starten (zichzelf dus), ook al staat ROBOCOPY.EXE in diezelfde map.
Zo werden vroeger ook regelmatig simpele windows virussen geschreven, gewoon een .BAT bestand met dezelfde naam als een .EXE in een map knikkeren en op het moment dat dat programma aangeroepen wordt zonder extensie, ben je de sjaak.
• SETLOCAL is niet nodig, kan weg.
• ROBOCOPY.EXE aanpassen in de laatste regel, dan kun je je BAT-bestand ook gewoon ROBOCOPY.BAT blijven noemen.
• Pad naar ROBOCOPY toevoegen met quotes als die EXE niet in dezelfde map staat als dat BAT-bestand. Dus iets van "%ProgramFiles%\naam van Robocopymap\robocopy.exe" of zo
Setlocal is nu weg.
Heb het aangepast naar .exe, ook al heet bat-bestand nu al robocopytest.bat
Staat in hetzelfde mapje, maar ik zal zo het pad wel toevoegen.
F_J_K schreef op vrijdag 29 september 2006 @ 15:01:
De vraag is dus hoe je een prompt opent, via start -> cmd, via programma's -> "command prompt" of iets anders?
Maar goed, de originele foutmelding is hiermee duidelijk: je was recursief bezig door robocopy aan te roepen met robocopy en dan krijg je een rondje. Door te hernoemen ben je dus al een heel eind.

Een prompt na elke opdracht is ook logisch, pas de laatste stap doet iets dat meer dan een halve milliseconde duurt.
Vraag is dus even wat de laatste regel doet; robocopy zelf. De rest is gewoon de parameters.
Domme vraag: "c:\documents and settings\casper willemsen\mijn documenten\test mapje" is gevuld en .\test destination bestaat maar is leeg?
Start -> Uitvoeren -> cmd
in het test mapje staan 2 mapjes en 3 .txt documentjes (.txt documentjes zijn leeg, maar bestaan wel.). Test destination mapje bestaat ook, maar is voor de rest helemaal leeg.
Vaan_Banaan schreef op vrijdag 29 september 2006 @ 15:31:
Oh ja, het kan inderdaad zijn dat er iets fout gaat met robocopy zelf. Wat staat er in testlog.txt? Aangezien je dat als Output log file hebt ingesteld, komen fouten van robocopy niet op het scherm, maar worden naar dit bestandje gestuurd
Ik krijg helemaal geen log bestand. Dus ik begin het idee te krijgen dat ik een verkeerde versie van robocopy.exe heb. Hij geeft nu ook een korte beschrijving van een paar Robocopy commando's sinds ik het bat-bestand van naam heb veranderd. Ik ga zo maar eens op zoek naar een andere versie van robocopy denk ik.
Pagina: 1