Avatar billede fhansen82 Mester
04. marts 2013 - 16:06 Der er 5 kommentarer og
1 løsning

Kørsel af Robocopy.exe via C#

Hej

C# driller mig lidt i forbindelse med at jeg gerne vil køre et job med Robocopy. Jeg har andre instanser som fungerer fint, og mistænker mellemrum i stinavnet som værende synderen. Dog er det ikke lykkedes mig, med alle de metoder jeg har prøvet med, samt fundet på nettet, at få det til at fungere. Jeg skal lave en spejling af en indholdet i en mappe fra en netværksplacering til en ekstern USB-HDD. Her er koden fra C#

private void button6_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo();

startInfo.FileName = @"C:\WINDOWS\System32\Robocopy.exe";

startInfo.Arguments = "\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox" "B:\201x-xx-xx BACKUP AF DROPBOX" "/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

Process.Start(startInfo);           
}

Stien skrevet i "startInfo.Arguments =" svarer til stien jeg skal skrive direkte i Robocopy, for at det fungerer korrekt. Dette er jeg klar over at man ikke kan i C#. For at forbigå "Unexpected escape sequence" fejlen, skal der benyttes enten dobbelt \\ gennem hele stien eller @ foran stien/stierne. Men dette kan jeg heller ikke få til at virke.

Jeg har lavet en WinForm med knapper, som skal aktivere et job ved tryk. Når jeg trykker på pågældende knap, starter Robocopy op og lukker lynhurtigt ned, før end jeg kan se nogen fejlbeskrivelse. Jeg kan derfor ikke beskrive fejlen nærmere, med mindre der er en som kan hjælpe med at sætte en form for break ind, så vinduet ikke lukker ned grundet fejl.

For at opsummere, så har jeg prøvet en del:

startInfo.Arguments = "\\Maskine\\C\\Programmer (egne)\\Dropbox\\Bruger\\Dropbox "B:\\201x-xx-xx BACKUP AF DROPBOX /MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

startInfo.Arguments = "\\Maskine\\C\\Programmer (egne)\\Dropbox\\Bruger\\Dropbox" "B:\\201x-xx-xx BACKUP AF DROPBOX" "/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

startInfo.Arguments = "\\Maskine\\C\\Programmer (egne)\\Dropbox\\Bruger\\Dropbox" + " " + "B:\\201x-xx-xx BACKUP AF DROPBOX" + " " + "/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

@"\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox @"B:\201x-xx-xx BACKUP AF DROPBOX /MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

startInfo.Arguments = @"\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox" @"B:\201x-xx-xx BACKUP AF DROPBOX" "/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

startInfo.Arguments = @"\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox" + " " + @"B:\201x-xx-xx BACKUP AF DROPBOX" + " " + "/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

Jeg er løbet tør for idéer, og kan ikke finde flere løsninger at prøve fra nettet.

I en anden instans, har jeg fx:

startInfo.Arguments = @"\\192.168.0.1\hd_samsung_hm500ji\Musik\Musik\ *.mp3 \\Maskine\C\Musik\Musik\ /MIR /LOG:SYNKRONISER_MUSIK_TIL_MASKINE.txt /TEE";

...hvilket fungerer fint. Det er derfor at jeg mistænker stien med mellemrum.

Mvh

Frank
Avatar billede Spotgun Seniormester
04. marts 2013 - 18:08 #1
Prøv med:

startInfo.Arguments = @"""\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox\"" ""B:\201x-xx-xx BACKUP AF DROPBOX"" ""/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE""";
Avatar billede fhansen82 Mester
04. marts 2013 - 20:13 #2
@spotgun: Nope. Giver følgende adskillige fejl: Unexpected character '\'
Avatar billede Spotgun Seniormester
04. marts 2013 - 21:59 #3
Hvad så med:
startInfo.Arguments = @"""\\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox\"" ""B:\201x-xx-xx BACKUP AF DROPBOX"" ""/MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE""";

Hvis ikke det virker, så må du skrive den eksakte streng der virker, hvis du bruger den direkte i Robocopy, og ikke i dit C# program.
Avatar billede fhansen82 Mester
05. marts 2013 - 17:07 #4
@spotgun: Det fungerede heller ikke. Men har selv fundet løsningen nu. Fandt en måde at køre CMD og ferigennem Robocopy, og kunne derved udlæse fejlen. Sammenholdt med dine input, fik jeg løst problemet. Problemet var som jeg nævnte i tidligere post, de mellemrum jeg har i mine stier. Dit sidste bud var næsten korrekt. Dog var det kun stierne, som skulle indrammes af "", hvilket resulterede i at den sidste del skulle stå således: /MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";
, hvor det sidste " er det afsluttende ", som indrammer hele strengen (se nedenfor).

Koden for kørsel af CMD:

string a;

a = @"/K robocopy ""\\Maskine\C\Programmer (egne)\Dropbox\bruger\Dropbox"" ""B:\201x-xx-xx BACKUP AF DROPBOX"" /MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

Process.Start("cmd.exe",a);

Koden som jeg endte med for at få det til at virke, endte så med at blive:

private void button6_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo();

startInfo.FileName = @"C:\WINDOWS\System32\Robocopy.exe";

startInfo.Arguments = @"""\\Maskine\C\Programmer (egne)\Dropbox\Bruger\Dropbox"" ""B:\201x-xx-xx BACKUP AF DROPBOX"" /MIR /LOG:BACKUP_DROPBOX_TIL_BACKUPDREV.txt /TEE";

Process.Start(startInfo);
}

Læg et svar spotgun. Du får point, da dine input var med til at løse problemet.

Mvh

Frank
Avatar billede Spotgun Seniormester
05. marts 2013 - 17:16 #5
Du får et svar her. Godt at høre du fik løst problemet.
Avatar billede fhansen82 Mester
05. marts 2013 - 17:46 #6
Tak for hjælpen spotgun. Havde aldrig selv gættet dobbelt " omkring stierne.
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