[XP] Batch alleen bestanden naar destination dir kopieren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oi!

Ik probeer het volgende voor elkaar krijgen:

Met een batch programmatje (robocopy of xcopy of gewoon copy) een directory inclusief subdirectorys doorzoeken naar een bepaald bestandsformaat (*.pdt) en vervolgens de bestanden verplaatsen naar een andere directory.
Dit lukt me wel met bijvoorbeeld robocopy dmv "robocopy /s /mov c:\robocopy\klanten c:\robocopy\gamma *.pdt" maar dan zet hij in de "destination dir" niet alleen de pdt bestanden maar ook de hele mappen structuur.

Weet iemand hoe ik deze bestanden kan kopieren naar de destination dir, en alleen de bestanden kan plakken in die directory?

Bvd!

Acties:
  • 0 Henk 'm!

  • KillerAce_NL
  • Registratie: Juni 2001
  • Niet online

KillerAce_NL

If it ain't broke...

xcopy *.extensie /s /e d:\destination ?

Acties:
  • 0 Henk 'm!

  • Tiny
  • Registratie: Mei 2003
  • Laatst online: 15-06 23:03

Tiny

Wat eten we?

ah good old dos-tijd.
Ik heb nooit begrepen dat dit soort commando's geen 'opvolgers' hebben gehad.

Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 14-09 17:19

pistole

Frutter

Tiny schreef op maandag 21 april 2008 @ 12:24:
ah good old dos-tijd.
Ik heb nooit begrepen dat dit soort commando's geen 'opvolgers' hebben gehad.
robocopy (bijvoorbeeld) is geen DOS commando maar een win32 console applicatie... groot verschil!

ik denk dat de oplossing van KillerAce niet gaat werken aangezien er dan alsnog directories worden gemaakt. Wellicht een VB scriptje maken?

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13-09 09:39

Janoz

Moderator Devschuur®

!litemod

Tiny schreef op maandag 21 april 2008 @ 12:24:
ah good old dos-tijd.
Ik heb nooit begrepen dat dit soort commando's geen 'opvolgers' hebben gehad.
De dos versie is nog hopeloos beperkt en spartaans, maar ik geef je gelijk dat een commandline je onnoemelijk veel meer mogelijkheden geeft. Gelukkig heeft linux nog wel een console. Bovenstaand probleem zou redelijk simpel opgelost kunnen worden met:

cp `find /sourcedir | grep ".ext$" ` /destinationdir

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 21:30
code:
1
for /f %%a in ('dir *.pdt /s /x /b') do move %%a c:\temp

[ Voor 4% gewijzigd door Nielson op 21-04-2008 12:52 ]


Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 14-09 17:19

pistole

Frutter

tja, dan maar de FOR syntaxis ff opzoeken, en dan kom je op het volgende:

code:
1
for /f "usebackq delims==" %i in (`dir /b/s [source]\*.xml`) do copy "%i" [dest]

edit:
:X te laat en te complex

[ Voor 10% gewijzigd door pistole op 21-04-2008 12:53 ]

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

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

alt-92

ye olde farte

En omdat er meer wegen naar Rome leiden onder Windows is er ook zoiets als WMI en/of Powershell scripting waar je dat mee kan doen.


Wat je in je voorstel nog niet hebt meegenomen is wat je gaat doen met dubbele files (zelfde naam, maar andere inhoud).
Doordat je robocopy in ieder geval de folderstructuur meeneemt loop je niet het risico dat je dingen gaat overschrijven.

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


Acties:
  • 0 Henk 'm!

  • KillerAce_NL
  • Registratie: Juni 2001
  • Niet online

KillerAce_NL

If it ain't broke...

pistole schreef op maandag 21 april 2008 @ 12:34:
[...]

robocopy (bijvoorbeeld) is geen DOS commando maar een win32 console applicatie... groot verschil!

ik denk dat de oplossing van KillerAce niet gaat werken aangezien er dan alsnog directories worden gemaakt. Wellicht een VB scriptje maken?
Idd, ik heb niet goed gelezen, de dirs gaan idd mee.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De directorys waarin hij zoekt staan zowieso geen bestanden in met dubbele namen, dit zijn bestanden die door een ander proces met een volgnummer opgehoogd worden.

Dus een vbscript is de beste oplossing denk je? ik had het liever met xcopy of robocopy gedaan, maar als dit niet te regelen valt moet ik me daar maar in gaan verdiepen!

Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 14-09 17:19

pistole

Frutter

Dus een vbscript is de beste oplossing denk je?
Lees je topic ff door ;)
Nielson schreef op maandag 21 april 2008 @ 12:52:
code:
1
for /f %%a in ('dir *.pdt /s /x /b') do move %%a c:\temp
pistole schreef op maandag 21 april 2008 @ 12:52:
code:
1
for /f "usebackq delims==" %i in (`dir /b/s [source]\*.xml`) do copy "%i" [dest]

[ Voor 9% gewijzigd door pistole op 21-04-2008 13:35 ]

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry, ik had het wel gelezen, maar ik dacht (omdat er onder je post een edit stond "te laat en te complex") dat het niet ging werken.

for /f %%a in ('c:\robocopy\klanten\*.pdt /s /x /b') do move %%a c:\
robocopy\gamma\)

Als ik je code zo uitvoer krijg ik "%%a niet verwacht op dit moment".

Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 14-09 17:19

pistole

Frutter

mja, gebruik "help for" in je command shell om uitleg te krijgen, dat is effort die je er zelf in kan steken :)

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Had ik al een blik in geworpen, en viel me hard tegen.

Tis niet dat ik zit te "frutten" :) , ik zit bijvoorbeeld al de hele ochtend te zoeken naar een oplossing, maar ik hoopte dat je een typvout oid in mijn commando kon zien waardoor het fout gaat, je weet wel een kommatje verkeerd ofzo.

Als ik bijvoorbeeld "for /f %%a" uitvoer zegt hij ook dat "%%a niet verwacht is op dit moment" dus ik dacht misschien heb je ook een foutje gemaakt bij het posten van de regel...

[ Voor 23% gewijzigd door Verwijderd op 21-04-2008 14:06 ]


Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 14-09 17:19

pistole

Frutter

nee, die van mij deed het goed (getest), jij gebruikt nu het voorbeeld van Nielson.

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 21:30
Verwijderd schreef op maandag 21 april 2008 @ 14:03:
Als ik bijvoorbeeld "for /f %%a" uitvoer zegt hij ook dat "%%a niet verwacht is op dit moment" dus ik dacht misschien heb je ook een foutje gemaakt bij het posten van de regel...
Jij voert het commando nu op de commando-regel uit, dan moet je inderdaad %a gebruiken, vanuit een batch-file moet 't %%a zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Aha, ik las dat van die 2 procenten in de batch idd net, en wederom had ik het voorbeeld van nielson gebruikt omdat je je eigen commando omschreef als "te complex" :)

Maar te complex is in dit geval wel de juiste, want ik heb het zojuist met succes uitgevoerd idd.

Thnx voor jullie hulp!

Acties:
  • 0 Henk 'm!

  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 21:30
Verwijderd schreef op maandag 21 april 2008 @ 14:21:
Aha, ik las dat van die 2 procenten in de batch idd net, en wederom had ik het voorbeeld van nielson gebruikt omdat je je eigen commando omschreef als "te complex" :)

Maar te complex is in dit geval wel de juiste, want ik heb het zojuist met succes uitgevoerd idd.

Thnx voor jullie hulp!
Misschien is die van pistole iets complexer, maar gaat in tegenstelling tot die van mij wel goed om met spaties in de bestandsnamen/directories.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oi!

Ik heb nog een vraagje over het FOR / F commando.

Als ik het onderstaand commando uitvoer, en er staat een *.pdt bestand in de klanten directory:

FOR /F "tokens=1,3* delims=," %G IN ('dir/b/s "c:\ftproot\klanten\*.pdt"') DO @echo %G %H %I

Dan krijg ik de output:

"c:\ftproot\klanten\eml_weiw\bla.pdt"

Als ik het commando uitvoer, en er staat GEEN *.pdt file in de klanten directory,

Dan krijg ik de melding: "File Not Found"

Nou wil ik graag als er geen *.pdt is en hij geeft de melding "file not found" terug, dat hij bijvoorbeeld GOTO :END uitvoert.

Ik heb me rotgezocht hoe dit moet maar ik kan het niet vinden!

Gr. jcp

[ Voor 8% gewijzigd door Verwijderd op 22-04-2008 12:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Kan je opvangen door bvb eerst dir/b/s "c:\ftproot\klanten\*.pdt te doen, en dan een if loop die %errorlevel% gaat controleren. Normaal geeft hij errorlevel 0 als er iets gevonden is, en 1 indien niet.

Dus dir blablabla
if %errorlevel% == 0 doe for loop
etc...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thnx! ik snap nu ook hoe die errorlevels werken :)
Pagina: 1