doc's copieren uit verschillende mappen

Status
Niet open voor verdere reacties.

Renee123

Gebruiker
Lid geworden
8 feb 2009
Berichten
65
Hi,

Iemand een idee hoe ik het volgende in een batchbestand kan krijgen:

Na het runnen van een programma ontstaan er allemaal subdirectories in de directory DATA. In de subdirectories staan allemaal verschillende txt-bestanden. Nou wil ik al deze txt-bestanden kopieren naar één map (bijv. C:\test\). Probleem daarbij is ook nog eens dat ik niet weet hoeveel en welke subdirectories er allemaal zullen ontstaan na het runnen van het programma.

Iemand een idee?:confused:
Tnx alvast!!
 
Zou zoiets kunnen zijn (als voorbeeld H:\Bestanden als bronmap, C:\Test als doelmap, dubbelen worden overschreven in de doelmap):

@echo off
FOR /f %%a IN ('dir /s H:\Bestanden\*.txt') DO (
COPY /Y "%%a" C:\Test\*.*
)


Kijk maar of het werkt zoals bedoeld.

Tijs.
 
Laatst bewerkt:
Ik weet niet of dit de bedoeling is:
xcopy c:\data\*.txt c:\doel/s/e/v
 
Ik weet niet of dit de bedoeling is:
xcopy c:\data\*.txt c:\doel/s/e/v

@De Hulk: Het is juist NIET de bedoeling van de topic-starter dat de hele mappenstructuur mee wordt gekopiëerd, maar dat alle .txt bestanden in 1 map worden gezet. Vandaar mijn constructie. [Ik had anders inderdaad jouw methode aangedragen.]

Tijs.
 
Zou zoiets kunnen zijn (als voorbeeld H:\Bestanden als bronmap, C:\Test als doelmap, dubbelen worden overschreven in de doelmap):

@echo off
FOR /f %%a IN ('dir /s H:\Bestanden\*.txt') DO (
COPY /Y "%%a" C:\Test\*.*
)


Kijk maar of het werkt zoals bedoeld.

Tijs.

Hmm, het werkt niet :(
Ik begrijp niet 100% wat er gebeurt, dus ik kan ook niet goed zeggen waar het misgaat. De foutmelding die ik krijg is iig:
"Het systeem kan het opgegeven bestand niet vinden."

Ik heb de bronmap/doelmap echt 3x gecheckt en die heb ik goed ingetypt.

@Tijs: als jij 3 nieuwe mappen aanmaakt in de map H:\Bestanden en in elke map een txt bestand plaatst, worden ze (de txt bestanden) bij jou dan wel gekopieerd naar C:\Test?? Want dan snap ik het echt niet meer :S
 
Laatst bewerkt:
Ik heb 'm aangepast, en nu werkt hij bij mij wel:

@echo off
FOR /f %%a IN ('dir /s /b H:\Bestanden\*.txt') DO (
COPY /Y "%%a" C:\Test\*.*
)


[Verschil zit 'm in in de toegevoegde /b achter het dir commando]

Succes,

Tijs.
 
Ik heb 'm aangepast, en nu werkt hij bij mij wel:

@echo off
FOR /f %%a IN ('dir /s /b H:\Bestanden\*.txt') DO (
COPY /Y "%%a" C:\Test\*.*
)


[Verschil zit 'm in in de toegevoegde /b achter het dir commando]

Succes,

Tijs.
Nou, schiet mij maar lek... Bij mij doet ie het niet :( Ik zal stap voor stap beschrijven hoe het er bij mij uitziet en wat ik gedaan heb, misschien dat iemand de fout kan ontdekken:

1) In E:\ bevindt zich een map [Scenario] met daarin 4 mappen [Run 1, Run 2, Run 3, Run 4]. In elke map bevindt zich een txt bestand [Test 1.txt in Run 1, Test 2.txt in Run 2, etc etc]. Dus de bestandsnaam van Test 4.txt = E:\Scenario\Run 4\Test 4.txt
2) In E:\ bevindt zich ook een map [Txts] waar ik uiteindelijk de 4 txt-bestanden heen wil kopiëren.
3) Ik heb de bovenstaande code gekopieerd in een txt bestand en opgeslagen als test.bat in de map E:\
4) Ik heb in het bat-bestand de mapnamen aangepast in de namen zoals ik hierboven beschreven heb, dus:
H:\Bestanden\*.txt => E:\Scenario\*.txt
C:\Test\*.* => E:\Txts\*.*
5) Omdat het niet werkt heb ik in het txt bestand nog het woord pause toegevoegd (3 regels onder de laatste oorspronkelijke regel), zodat ik kan zien wat er gebeurt.
6) dubbelklikken op test.bat

Dit komt er dan in het cmd-window te staan:

Het systeem kan het opgegeven bestand niet vinden.
Het systeem kan het opgegeven bestand niet vinden.
Het systeem kan het opgegeven bestand niet vinden.
Het systeem kan het opgegeven bestand niet vinden.
Druk op een toets om door te gaan. . .

Het is wel precies 4x dezelfde regel (dat hij het bestand niet kan vinden) en er staan 4 txt bestanden in die mappen. Of gaat het hier om de 4 mappen Run 1, Run 2, Run 3, Run 4 (lijkt mij niet)? :confused:

Dus.... iemand een idee waarom het bij Tijs wel lukt en bij mij niet?
 
Kan een aantal oorzaken hebben:
Bron bestanden hebben als markering 'verborgen' of 'systeem'. Evt. zou het er ook aan kunnen liggen dat de doelmap bestanden bevat die niet overschreven kunnen worden, geen lees- en schrijfrechten in de doelmap, de doelmap bestaat niet. Ook kunnen de bronbestanden nog open staan.

Doe het eens zo, dan kun je het nóg wat beter volgen wat er gebeurt (aangepast aan jouw laatste informatie):
@echo off
MD C:\Txts
PAUSE
FOR /f %%a IN ('dir /s /b E:\Scenario\*.txt') DO (
ATTRIB -s -h -r "%%a"
ECHO "%%a"
ATTRIB "%%a"
COPY /Y "%%a" C:\Txts\*.*
PAUSE
)


Tijs.
 
Laatst bewerkt:
Juist... We komen steeds dichterbij :)

Dit is de melding die je krijgt:

Bestand niet gevonden - E:\Scenario\Run
"E:\Scenario\Run"
Bestand niet gevonden - E:\Scenario\Run
Het systeem kan het opgegeven bestand niet vinden.

Het probleem zit 'm dus in een bestandsnaam met een spatie daarin. Als ik Run 1 verander in Run_1 krijg ik deze melding:
Bestand niet gevonden - E:\Scenario\Run_2\Test
"E:\Scenario\Run_2\Test"
Bestand niet gevonden - E:\Scenario\Run_2\Test
Het systeem kan het opgegeven bestand niet vinden.

Ok, Test 3.txt veranderen in Text_3.txt.

En dan doet ie het wel!! Woei! :)
Alleen betekent dit nu dat ik alle mapnamen & bestandsnamen aan moet passen zodat er nergens meer spaties in zitten?? Of kan dit op een andere (lees: snellere manier) :)
 
Probeer de volgende variant:

@echo off
MD C:\Txts
PAUSE
FOR /f "delims=" %%a IN ('dir /s /b E:\Scenario\*.txt') DO (
ATTRIB -s -h -r "%%a"
ECHO "%%a"
COPY /Y "%%a" C:\Txts\*.*
PAUSE
)


Kijk wat bovenstaande bij jou oplevert.

[De aanpassing zit in het toegevoegde "delims=". Zónder dat wordt de uitvoer van het 'dir' commando afgekapt vanaf de eerstgevonden spatie (of TAB).
delims=xxx - specifies a delimeter set. This replaces the default delimiter set of space and tab.
Oftewel: Ik heb een 'lege' "delims=" in de commando-regel gezet om dat gedrag te 'overrulen'. Nu wordt de hele regel in ogenschouw genomen ipv. alleen t/m de eerste spatie (of TAB).]

Succes,

Tijs.
 
Laatst bewerkt:
Jaaaa!!!! That's it :) Volgens mij werkt alles nu perfect.
Onwijs bedankt voor je hulp! :thumb:
 
Opgeschoond is het:

@echo off
MD C:\Txts
FOR /f "delims=" %%a IN ('dir /s /b E:\Scenario\*.txt') DO (
ECHO "%%a"
ATTRIB -s -h -r "%%a"
COPY /Y "%%a" C:\Txts\*.*
)

Hierbij blijft de ECHO er nog instaan, zodat je kunt volgen welke bestanden gekopieerd gaan worden. Ook worden alle attributen verwijderd (behalve het A (=Archive) attribuut) vóórdat de bestanden worden gekopieerd.

Mocht je ook alle verborgen txt-bestanden (dus met het S (=System) en/of het H (=Hidden) attribuut) willen kopieren, dan het het FOR statement vervangen door:
FOR /f "delims=" %%a IN ('dir /s /b /a E:\Scenario\*.txt') DO (


Fijn dat je ermee geholpen bent. :)

Graag (indien nog niet gedaan) even de vraag op opgelost zetten: Klik op "Vraag is opgelost" in het vakje "Status van de vraag", iets verder naar beneden aan de rechterkant van deze webpagina.

Tijs.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan