Mappenstructuur kopiëren

Status
Niet open voor verdere reacties.

HHD

Gebruiker
Lid geworden
12 apr 2016
Berichten
23
Goedemorgen,

op mijn computer heb ik een map staan met daarin 800+ mappen die allen bestanden bevatten. Nu wil ik voor al deze mappen een gelijke submappenstructuur maken.
Nu dacht ik zelf dat de snelste manier om dit te doen als volgt was: het aanmaken van één keer de volledige mappenstructuur en deze vervolgens naar alle mappen kopiëren/plakken.
Dit betekend dat ik alle 800 mappen moet aanklikken. Kan dit niet op een snellere en eenvoudigere manier? Bijvoorbeeld met een programma?

Wellicht is er op dit forum kennis hierover aanwezig.

Met vriendelijke groet,
HHD
 
Ik denk dat het probleem is dat je te maken hebt met 800 submappen die allemaal een eigen naam hebben en je moet met een commando het doel opgeven. xcopy vraagt om een doel.
 
Dat kan met robocopy. Hiermee kun je enkel en alleen een mappenstructuur (dus exclusief de bestanden) kopieren.

Ik zou het als volgt aanpakken
1- template map maken met de gewenste indeling
2- dos commando op die hoofdmap van die 800+ mappen loslaten -> DIR /B /AD>lijst.txt
3- in lijst.txt staat nu een keurig overzicht van al je mappen. En nu een batch die robocopy voor elke map een kopie laat maken van de stuctuur

Vraag is dan wel nog wat je met je huidige bestande submappen en bestanden gaat doen, want die komen in deze vorm random tussen de nieuwe structuur terecht. Persoonlijk zou ik dus eerst een volledige lege structuur opzetten NAAST de huidige en daarna de benodigde documenten gaan verplaatsen.
 
Hartelijk dank voor het meedenken, ik ga er z.s.m. mee aan de slag.
 
@Senso: Dat kan gewoon, via een FOR lus in CMD.EXE, toch gebruikt worden
Voorbeeld (interactief ingevoerd, in een batchfile moet het %-teken overal 2x gebruikt worden om te 'escapen'):
FOR /F %X IN ('dir /B /AD') DO XCOPY "bronmap" "%X" /t /e
[Die "-tekens horen er te staan]
Het kan zelfs gecombineerd met het uitvoerbestand van RogerS:
FOR /F %X IN (lijst.txt) DO XCOPY "bronmap" "%X" /t /e

Overigens gaat RogerS er vanuit dat alle 800 relevante doelmappen in/onder dezelfde basismap staan, dus een 'platte' mappenstructuur van toepassing is. Zijn de doelmappen echter (gedeeltelijk) subsubmappen, dan moet er /S achter, dus
DIR /B /AD /S > lijst.txt
Ik heb gemerkt dat, direct toegepast in de FOR lus (ik weet niet waarom, mogelijk Windows XP foutje?) variabele X anders/fout vult als ik /S toevoeg, maar lijst.txt wordt er wél correct mee gemaakt.
Veiligste/meest gecontroleerde manier is via zo'n lijst.txt, want die is bekijkbaar/bewerkbaar vóórdat je effectief de kopieeractie start (of dat nou via batch of robocopy is). Kun je mooi vooraf checken of het allemaal klopt waar je naar wilt gaan kopiëren en de mappen waar je het evt. niet in wilt hebben eruit halen. Bovendien nooit risico van loops.

PS: Het enige waar ik me 'zorgen' over maak is of het commando niet te lang gaat worden (en dus foutmeldingen genereert), zeker als er 'diepe' submappen bij gewenst zijn (in de te kopiëren bron en/of de doelmappen).
Kan evt. opgelost worden via het subst commando om in ieder geval de lengte van de 'basismap' van de hiërarchie te verkorten naar een schijfletter, bijv. de B: schijf, maar dat verkort niet de submappen structuur daar onder.
subst B: C:\Users\Tijs\Documents\submap\submap\submap\submap\submap\submap\submap\diepstesubmap
B:
<commando's, batchfile etc. uitvoeren>
na afloop: weer terug naar C: en de substitutie verwijderen
C:
subst B: /d


Tijs.
 
Laatst bewerkt:
Ik lees in de vraagstelling niets over bestanden/files. En mijn kennis is beperkt. Persoonlijk zou ik een batch-file maken.
Ik list/plak de directory in Word met Karen's directory printer of PrintFolder. Dan is het een kwestie van handig zoeken en vervangen.
Dan plaats ik alles in een kladblok, weet niet of dat nodig is (kan mogelijk ook direct in Word) en sla het kladblok op als kopieer.bat. Even controleren met RMK > Bewerken dat er geen vraagtekens zichtbaar zijn geworden, deze verwijderen met vervangen. Opslaan en je kun deze uitvoeren.
Ik zou dat vrij snel kunnen uitvoeren. Of dat nu 800 of 1500 submappen zijn maakt niets uit. In dit voorbeeld = 800 submappen de hoofdmap waarin de submappen staan. Dus in map 1, 2, 800 wordt de nieuwe structuur geplaatst. Getest en het werkt.

Code:
Cls
Cd\
E:
xcopy E:\"Nieuwe structuur" "E:\800 submappen\1\" /s/e/v
xcopy E:\"Nieuwe structuur" "E:\800 submappen\2\" /s/e/v
xcopy E:\"Nieuwe structuur" "E:\800 submappen\800\" /s/e/v
 
Laatst bewerkt:
@Senso: Mijn verhaal kan ook in een batchfile. Voorbeelden:
[batch1.cmd]
FOR /F %%X IN ('dir /B /AD') DO XCOPY "bronmap" "%%X" /t /e

[batch2.cmd]
DIR /B /AD > lijst.txt
FOR /F %%X IN (lijst.txt) DO XCOPY "bronmap" "%%X" /t /e

[batch3.cmd, met subsubmappen als doel]
DIR /B /AD /S > lijst.txt
FOR /F %%X IN (lijst.txt) DO XCOPY "bronmap" "%%X" /t /e

[batch4.cmd, met subsubmappen als doel, met basismap van het doel expliciet aangegeven, dus plaatsing van het batchbestand maakt niet uit, zolang lijst.txt daar maar weggeschreven mag worden]
DIR /B /AD /S "doelmap-met-800submappen" > lijst.txt
FOR /F %%X IN (lijst.txt) DO XCOPY "bronmap" "%%X" /t /e


Tijs.
 
Laatst bewerkt:
@dnties. Die /S is bewust weggelaten. In de huidige structuur staan namelijk al bestanden en mappen. Met /S zou ik die mappen straks ook gaan vullen met de nieuwe structuur. In het geval van een NIET platte structuur zal je een lijst moeten maken met DIR /S /B /AD >lijst.txt en dan handmatig gaan filteren wat je wel en niet wilt meenemen.
 
@Tijs. Met dank voor je uitgebreide uitleg. Helaas moet ik je teleurstellen omdat dit voor mij een brug te ver is. Het is te ingewikkeld voor mij en ik 'pak' dat niet. Ik moet het zelf begrijpen en dat dus op 'mijn eigen' manier doen.

Overigens nog even een aanvulling.
s = submappen
e = empty
v = verify
Als er bestanden staan in bron en doel dan maakt dat niet uit, want die blijven behouden.
Bestanden in de bron (= nieuwe structuur) met dezelfde naam als in het doel overschrijven die in het doel.
Maar het lijkt mij dat er in deze opzet geen sprake van is. Ik denk dat TS de mappen wil voorzien van een aantal 'vaste/gelijke/standaard' mappen.
In mijn batch-file moet je de s niet weglaten.
 
Laatst bewerkt:
@dnties. Die /S is bewust weggelaten. In de huidige structuur staan namelijk al bestanden en mappen. Met /S zou ik die mappen straks ook gaan vullen met de nieuwe structuur. In het geval van een NIET platte structuur zal je een lijst moeten maken met DIR /S /B /AD >lijst.txt en dan handmatig gaan filteren wat je wel en niet wilt meenemen.

Niet voor niets ben ik helemaal voor jouw lijst.txt constructie, vanwege de controle die je ermee hebt, en (vooral) het vooraf al kunnen ontwijken van fouten door er eerst even doorheen te lopen in (bijv.) Kladblok en mappen eruit te halen waar niets naar toe gekopieerd moet worden.
Veiligste/meest gecontroleerde manier is via zo'n lijst.txt, want die is bekijkbaar/bewerkbaar vóórdat je effectief de kopieeractie start (of dat nou via batch of robocopy is). Kun je mooi vooraf checken of het allemaal klopt waar je naar wilt gaan kopiëren en de mappen waar je het evt. niet in wilt hebben eruit halen. Bovendien nooit risico van loops.

Tijs.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan