Gå til innhold

Hvordan kopiere en fil til flere mapper automatisk?


pcp160

Anbefalte innlegg

Trenger litt hjelp for å tenke klart her nå.

Dette gjelder da egentlig både XP og Vista, og saken er at jeg vil "overvåke" en bestemt mappe, og hver gang det kommer en ny fil i denne mappen skal den nye filen umiddelbart kopieres til et par andre mapper. Altså en slags automatisk speiling.

 

Noen som har tips for hvordan dette kan gjøres, og gjerne da så enkelt som mulig? :)

Lenke til kommentar
Videoannonse
Annonse

Fikk da noen tusen treff på søkeordene synchronize program. Så er det jo ikke værre enn å tråle igjennom beskrivelsen av hvert enkelt program.

 

Det er jo to egenskaper programmet skal kunne ha som et billig backup-program som oftest er foruten:

- Sanntid synkronisering

- Synkronisere til fler enn 1 mappe.

 

Når det er sagt, så lurer jeg på om du har tenkt over følgende senarioer:

- Et virus kommer på maskinen din og destruerer alle viktige filer. Noen sekunder etterpå oppdaterer backup-programmet de to andre mappene, slik at også backupene blir korrupte?

 

Egentlig så er det ikke så vanskelig å gjøre nettopp dette vha et script som tråler gjennom katalogen og leter opp fil med nyeste datostempel- lagrer denne og kjører samme rutine om igjen som sjekker opp mot siste lagrede dato. F.ex med 5 sekunders mellomrom.

Og så finnes det kommandolinje-programmer som kan kopiere filer som bare er nyere enn originalen.

 

Xcopy kan kun brukes til dette ved at man kan få den til å kopiere kun filer som har atributtet arkiv påslått. I praksis vil arkiv være slått på for en fil som er endret eller opprettet etter siste sikkerhetskopi.

 

Og så finnes det en mer avansert utgave som kan lastes ned, xxcopy. Den kan derimot brukes til å kopiere filer utifra om den har nyere datostempling enn filen i en backup-mappe.

 

Problemet med xcopy og xxcopy er at hvis du glemmer deg av, og åpner en fil (regnskap eller annet viktig) i feil mappe - så risikerer du å miste disse dataene. Spesielt hvis du ikke lager et script som får (x)xcopy til å gå i løkke rundt mappene, dvs sjekker opp alle mappene mot hverandre og kopierer nyeste versjonen av en fil til de andre mappene.

 

Enkleste metode

Kjør et batch script. Dette skal ha to linjer med xcopy-kommandoen. En for hver målmappe.

 

Jeg ser for meg at scriptet blir seende ut noe slik som dette:

:start
xcopy hovedmappe målmappe1 /A
xcopy hovedmappe målmappe1 /M

rem Her kommer et kall til en kommando
rem som pauser scriptet

goto start

 

Det er to ulemper med bruk av bat-fil:

- Det finnes ingen innebygget kommando som kan pause bat-scriptet. Dette må lastes ned fra nettet separat. Eller man kan bruke ping-kommandoen til å vente.

- Du har dette sorte vinduet som alltid ligger i bakgrunnen. Det kan være minimert - men vil likevel være synlig. Det finnes imidlertid programvare på nett for å skjule kommandovinduer, men det virker noe krøkkete.

 

Hvis de to ulempene med bruk av batfil gjør at løsningen forkastes, så vil vel nermeste alternativ uten å gå veien om programvare være å lage et vbs script for jobben.

Endret av geir__hk
Lenke til kommentar

Hjertelig takk for godt svar og forslag Geir_hk. :thumbup:

Jeg så vel for meg at dette var mulig med noe i retning av et script som du nevner, men har så lite erfaring med sånt, så visste liksom ikke helt hvor jeg skulle begynne...

Jeg må studere svaret litt nærmere og vurdere hva som kan være hensiktsmessig.

 

Vedrørende scenario med virus, eller fare for datatap, så bør jeg kanskje si litt mer om hva dette er til. For det er ikke snakk om backup, eller viktige filer, men noe som skal brukes til forenkling av et spill (merklig nok, og muligens litt sært..?)

 

Det er nærmere bestemt snakk om flysimulator som jeg har i 2 varianter og som brukes fra både Vista og XP, bla avhengig av flytype.

Til dette har jeg så et program som genererer realistiske flyruter med info om fart, høyde, frekvenser for waypoints, osv, osv. Dette programmet lagrer en fil med denne infoen i flysimulatorens mappe slik at selve simulatoren vet hvor man skal, blandt annet så ATC (Air Trafic Control) kan gi riktige instrukser underveis. I tillegg lagres en annen fil i selve flyets FMC (Flight Management Computer) slik at jeg kan hente frem og programere denne ruten i flyets navigasjons computere.

 

Jeg klarer ikke få dette navigasjonsprogrammet til å sende de 2 filene noe annet sted enn ett forhåndsbestemt sted for hver filtype.

Det jeg ønsker er bare at disse filene skal havne i flere flys, og flere simultatorers respektive mapper, uten at jeg manuelt må kopiere de rundt til rette mapper på forhånd.

 

Det er noe mer innviklet enn dette også, men jeg tror dette skulle gi et greit bilde på hva jeg er ute etter. Det er altså ikke backup, ikke mange filer, ikke kritiske filer, men bare forsøk på forenkling av spill og lek på litt høyt nivå... :D

Lenke til kommentar

Ok, da vet vi jo litt mer.

 

Men da kan du kanskje vurdere følgende, også løst ved en enkel batch-fil (eller vbs-fil for den saks skyld).

 

Innholdet i batfila:

Start "Flysimulator" /Wait ...\flysimulator.exe
xcopy kilde mål1 /A
xcopy kilde mål2 /M

 

Mulig du må eksperimentere med Start-kommandoen for at det skal virke OK. Det er meningen at cmd skal vente på at du avslutter programmet før kopieringa starter.

Lenke til kommentar

Ok takk igjen for forslagene dere, alle ser ut til å kunne være brukbare så her er det bare å velge og vrake.

Jeg la inn et GUI for robocopy på en virtuell maskin for å prøve meg litt, med det kan jeg generere script og få en liten mal på hvordan det kan se ut. (he he, for enkelte av oss er det feks ikke innlysende når det skal være / og når det skal være \ , så da hjelper det å se noen eksempler i praksis... :blush: )

 

Men ok Geir, jeg hadde ikke tenkt så veldig nøye gjennom hvordan jeg ville ha dette før jeg spurte, dvs ikke annet enn at jeg var lei av å kopiere filer rundt, eller lure på hvilken mappe den ene eller andre flyruten ligger i. Så selve kopieringsprosessen må gå automatisk, men det er ikke strengt tatt nødvendig at dette overvåkes hvert annet sekund hele tiden, og det er vel det du prøver å vise i siste forslaget, at prosessen på en eller annen måte trigges av flysimulator.exe.

 

Jeg liker i såfall den ideen, og har nå fått god nok oversikt over selve kopieringsdelen av et slikt script, men dette Start "Flysimulator" /Wait ...\flysimulator.exe er fortsatt litt uklart for meg. Jeg får kanskje søke litt rundt dette med start-kommando.

 

Til slutt, vil noen gi meg kortversjonen av forskjellen på en cmd og bat fil..?

Lenke til kommentar

Her er en vbs-script demo som overvåker aktiviteten i mappa c:\test og som hver gang en ny fil legges inn, kopierer den over til mappene Test1 og Test2. For å stoppe scriptet, gå i task managers prosessvindu og avslutt wscript.exe

 

Set FSO = CreateObject("Scripting.FileSystemObject")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _
	& "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
		& "TargetInstance.GroupComponent= " _
			& "'Win32_Directory.Name=""c:\\\\test""'")
'filene som kopieres ligger her i mappa: c:\test, merk \\\\ foran test
Do While TRUE
Set objEventObject = colMonitoredEvents.NextEvent()
Select Case objEventObject.Path_.Class
	Case "__InstanceCreationEvent"
	filename = objEventObject.TargetInstance.PartComponent
	i = InStr(1,filename,"=")
	filename = Mid(filename,i+1)
	filename = Replace(filename,"\\","\")
	filename = Replace(filename,"""","")
'Dem to mappene det kopieres til ligger i mappene Test1 og Test2
	FSO.CopyFile filename, "C:\Documents and Settings\Eier\Skrivebord\Test\test1\"
	FSO.CopyFile filename, "C:\Documents and Settings\Eier\Skrivebord\Test\test2\"   
   End Select
Loop

Lenke til kommentar

Hmm dette ble jo både artig, lærerikt, og nyttig. Har absolutt ikke noe i mot å lære litt underveis, og det har jeg gjort.

Det fungerte utmerket i mitt lille testoppsett det der backup. (Men med tanke på ditt nick visste du vel at det ville gjøre det ;) )

 

Tror jeg vil prøve å tilpasse det vbs scriptet på den maskinen jeg skal bruke dette, og se hvordan det går.

Lenke til kommentar

Jada pcp160, visste det funka, poster ikke noe kode her uten at jeg først tester den selv. Skjønner ikke vitsen med å slenge ut kode i hytt og pine og bare liksom håpe at den funker. Lykke til med tilpassinga!

Endret av backup
Lenke til kommentar

Skal vi se, selv de enkleste ting er vanskelig når man ikke kan det... Så jeg står litt fast med feilmeldig om "ikke analyserbar spørring" linje 4.

 

Jeg kopierer jo bare din kode, og endrer stier, og der jeg tilsynelatende roter litt er her:

& "'Win32_Directory.Name=""c:\\\\test""'")

Som jeg prøver å gjøre om til

& "'Win32_Directory.Name=""c:\\\\test\ny mappe""'")

eller

& "'Win32_Directory.Name=""c:\test\\\\ny mappe""'")

Og noen flere varianter av dette.

 

Men jeg ser ikke ut til å treffe riktig, så hvis noen har en teskje skulle jeg gjerne vite hvordan dette skal formateres riktig.

I praksis er jo altså stien feks; C:\Documents and Settings\mitt navn\Mine Dokumenter\flysim

 

Skilles det forresten mellom store og små bokstaver i mappestier i Windows?

Lenke til kommentar

Set FSO = CreateObject("Scripting.FileSystemObject")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE " _
	& "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
		& "TargetInstance.GroupComponent= " _
			& "'Win32_Directory.Name=""c:\\\\test\\\\ny mappe""'")
'filene som kopieres ligger her i mappa: c:\test, merk \\\\ foran test
Do While TRUE
Set objEventObject = colMonitoredEvents.NextEvent()
Select Case objEventObject.Path_.Class
	Case "__InstanceCreationEvent"
	filename = objEventObject.TargetInstance.PartComponent
	i = InStr(1,filename,"=")
	filename = Mid(filename,i+1)
	filename = Replace(filename,"\\","\")
	filename = Replace(filename,"""","")
'Dem to mappene det kopieres til ligger i mappene Test1 og Test2
	FSO.CopyFile filename, "C:\Documents and Settings\mitt navn\Mine Dokumenter\flysim\"

   End Select
Loop

 

Du har allerede en c:\test\ny mappe antar jeg

Og du har en flysim folder i dine dokumenter

 

Hvis du forandrer ...mitt navn..ovenfor.. lagre--kjøre...og deretter kopiere en fil i \ny mappe din, vil ikke den komme til \flysim folder mon tro?

 

(siden du har prøvd så mange ganger nå, hvor mange wscript.exe finner du i taskmanager din :) )

Lenke til kommentar

Hjelp -nå har jeg fått virus! Har 130 instanser av prosessen wscript.exe!!!

 

 

He he, neida, har hatt oppgavebehandlig oppe, og fjernet prosessen mellom hvert forsøk for å føle meg sikker på at det var siste versjon av mine små forsøk som var i bruk.

Takk for tipset wiberos, det skal visst ikke spares på \ (slash?) i vbs-script, og nå fikk jeg det til. Flightplan dukket opp i de mappene jeg ønsket så fort den var laget, og alt er fryd og gammen så langt. :thumbup:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...