Bestanden naar eigen folder verplaatsen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
Beste lezer(s),

Ik heb een folder waarin een 10.000 bestanden staan, vrijwel allemaal pdf-bestanden.

Een groot gedeelte van deze bestanden moet verplaatst worden naar een eigen subdirectory binnen de bestaande folder. Elke folder moet de naam krijgen van de stam van het bestand.

Bvb.

c:\folder\abcdegh123456.pdf verplaatsen naar c:\folder\abcdegh123456
c:\folder\abcdegh123457.pdf verplaatsen naar c:\folder\abcdegh123457
c:\folder\abcdegh123458.pdf verplaatsen naar c:\folder\abcdegh123458
...
c:\folder\uvwxywz999999.pdf verplaatsen naar c:\folder\uvwxyz999999


Ik dacht ergens xcopy of move te gebruiken en diit een cmd bat bestand te gieten, maar ik vrees dat mijn MS Dos kennis fel verwaterd is met de jaren die me verzwaard hebben :|

Ik hoop dan ook vurig om van één (of meerdere) lezers één (of meer) oplossingen te kunnen lezen waarvoor mijn eeuwige dank!! _/-\o_

Reeds veel dank bij voorbaat voor uw aandacht (en eventuele oplossing),

Danny

Acties:
  • +1 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

En toch zou ik vragen of je kunt aangeven waar je strandt in het zelf maken van een script. Als je graag cmd gebruikt en niet bijv powershell: met FOR zou je er moeten komen. Check wat voorbeelden via /? en/of via het web.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • +1 Henk 'm!

  • Tens
  • Registratie: Maart 2006
  • Laatst online: 11:03
Of ik begrijp niet wat je wilt, of ik begrijp niet waarom je het wilt:

je hebt nu map "a" met daarin pdf 001 t/m 10000, en die moeten naar:

de submap 001 t/m 10000 onder map "a"?

met als resultaat dat je 10000 mappen hebt met één bestand in plaats van één map met 10000 bestanden?

if you are neutral in a situation of injustice you have chosen the side of the oppressor


Acties:
  • +1 Henk 'm!

  • efan
  • Registratie: Januari 2001
  • Niet online
niet helemaal correct denk ik, maar volgens mij iets in deze vorm?:

for /R "c:\folder" "%%f" in (*.pdf) do xcopy -i "%%f" "c:\folder\"%%~nf"\"

[ Voor 35% gewijzigd door efan op 06-07-2017 19:48 ]


Acties:
  • 0 Henk 'm!

  • Just me !
  • Registratie: September 2006
  • Laatst online: 23-05-2023

Just me !

Ik leer nog steeds......

Wanneer ik dit zo lees van bestanden en directorys verplaatsen en renamen zou ikzelf doen met Total Commander.
Dit is hier een perfect prgr voor ! :)

[color="#2412F9"]J[/color][color="#Ff96512"]h[/color][color="#15BD26"]u[/color][color="#E51AF7"]s[/color][color="#000000"][/color]t me !


Acties:
  • 0 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
Tens schreef op donderdag 6 juli 2017 @ 19:10:
Of ik begrijp niet wat je wilt, of ik begrijp niet waarom je het wilt:

je hebt nu map "a" met daarin pdf 001 t/m 10000, en die moeten naar:

de submap 001 t/m 10000 onder map "a"?

met als resultaat dat je 10000 mappen hebt met één bestand in plaats van één map met 10000 bestanden?
Ik weet dat het dom lijkt maar er is wel een bepaalde reden voor vanzelfsprekend 8)7

Acties:
  • +1 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

Houd ook rekening mee dat met oudere file systems het aantal files en folders ook beperkt is.

Persoonlijk zou ik gaan voor een structuur die is opgebouwd uit de naam, eerst 36 folders 0-9, a-z en daar weer 36 sub folders in middels dezelfde structuur enz enz.. (er vanuit gaande dat ze allen een logische naam hebben).
Zo doen wij dat in onze drukkerij ook en daar zitten we al op veel (over de 400 miljoen) pdf files.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
ido schreef op donderdag 6 juli 2017 @ 19:22:
niet helemaal correct denk ik, maar volgens mij iets in deze vorm?:

for /R "c:\folder" "%%f" in (*.pdf) do xcopy -i "%%f" "c:\folder\"%%~nf"\"
for /R "c:\folder" "%%f" in (*.pdf) do xcopy -i "%%f" "c:\folder\"%%~nf"\"

Voor alle bestanden, eindigend op f kopieer deze naar ....

-i na xcopy, staat voor: Als de bestemming niet bestaat en en wanneer er meer dan een bestand gekopieerd wordt, moet de bestemming een folder zijn.

for = Voor
%%f = alle bestanden eindigend op f (de extensie pdf)
do = voer uit
"%%f" = ?? foldernaam die gelijk is aan de stam van de bestandsnaam ??
~nf = ???

Met excuses voor mijn onwetendheid 8)7

Acties:
  • +1 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

@DanPa Ga anders gewoon wat proberen met een test setje op een veilige plek. Met trial en error leer je het meest.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
DukeBox schreef op donderdag 6 juli 2017 @ 20:42:
@DanPa Ga anders gewoon wat proberen met een test setje op een veilige plek. Met trial en error leer je het meest.
Ben ik volop met bezig 8) Maar toch bedankt voor de tip ;)

Acties:
  • +1 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

DanPa schreef op donderdag 6 juli 2017 @ 20:44:
[...]


Ben ik volop met bezig 8) Maar toch bedankt voor de tip ;)
Meestal geeft /? --help, -? of -h als argument al de nodige uitleg voor het commando, dan hoef je het niet hier te vragen. Met name 'for /?' is vrj uitgebreid met zelfs wat voorbeelden.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
@ido

Dus iets zoals dit ??

echo Move files to (and if nescessary create) directories with the same name

@echo off

@pause

for %%f in (*.pdf) Do (

if NOT EXIST %%~nf mkdir %%~nf
move %%f %%~nf

)

@pause

Acties:
  • +1 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

Ja, maar als tip, ga met quotes werken en/of maak wat sanitize filters, als je een keer een spatie in je filename hebt ga je de mist in. Een plaats een slash achter de dir, dan kan je nooit per ongeluk de file renamen als er iets raars in de naam zit (dan krijg je een foutmelding).
(en plaats je code trussen [code] [/code] tags)

[ Voor 41% gewijzigd door DukeBox op 06-07-2017 20:55 ]

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • +3 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
@echo off
for %%f in (*.pdf) do (
md "%%~nf"
move "%%f" "%%~nf"
)

Vervang (*.pdf) door (*) om alle bestanden te verplaatsen.

Dankzij jullie hulp was het nooit gelukt !! Bedankt Iedereen !!

Acties:
  • 0 Henk 'm!

  • efan
  • Registratie: Januari 2001
  • Niet online
DanPa schreef op donderdag 6 juli 2017 @ 21:28:
@echo off
for %%f in (*.pdf) do (
md "%%~nf"
move "%%f" "%%~nf"
)

Vervang (*.pdf) door (*) om alle bestanden te verplaatsen.

Dankzij jullie hulp was het nooit gelukt !! Bedankt Iedereen !!
Top! :) %%f is inderdaad een variabele waar elke pdf bestandsnaam even in komt (in de for lus), en de %%~nf is om de extensie eraf te laten zodat je enkel de bestandsnaam hebt (om de directory te maken). de md en move is inderdaad wel een goeie, ik zat even in de knoei met copy en xcopy :)

Acties:
  • +2 Henk 'm!

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
-1 voor het niet gebruiken van PowerShell :)

Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

@Squ1zZy Ben ik het wel mee eens maar soms moet het niet het doel voorbijstreven.

Persoonlijk zie ik PS meer als een programmeer taal dan een script taal. Qua tool set zoveel beter dan batch maar soms ook gewoon een stap te ver om het 'simpel' te houden voor de gebruiker.
(Ik vraag me ook af of dit commando ook met 1 regel te maken is in PS.)

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 16:57

heuveltje

KoelkastFilosoof

Squ1zZy schreef op donderdag 6 juli 2017 @ 22:48:
-1 voor het niet gebruiken van PowerShell :)
Dir *.* >x.txt
En daarna doe ik dit soort shit altijd in excel, en exporteer dat als een bat file met een paar duizend regels.
Hoe veel strafpunten krijg je daarvoor ? :)

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • +2 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 14:40

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Doe dit lekker in Powershell.... Even ongetest en uit mijn hoofd:

code:
1
2
3
4
5
6
7
8
9
10
11
$Source= "C:\bla"
$Documents=Get-Childitem "$Source"

For-Each ($Document in $Documents) {

$Foldername = ($Document).split"."[0]

New-item "$Source\$foldername"-type directory
Move-Item "$Source\$Document" "$Source\$foldername\$Document"

}

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

@Question Mark Ja, daar hadden we het net over.. 6 regels i.p.v. 1.
code:
1
@for %f in (*.pdf) do (md "%~nf" & move "%f" "%~nf")

en nee, ik zeg niet dat batch beter is.. integendeel.

@heuveltje..en ja, daar geef ik zelfs strafpunten voor ;)

[ Voor 32% gewijzigd door DukeBox op 10-07-2017 10:01 ]

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 14:40

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Je weet dat in jouw voorbeeld de extensie van de filename ook gebruikt wordt in de foldername? Split die dan ook even netjes met "Set" ;)

edit:
Wordt al gedaan zie ik


Overigens vind ik aantal regels van een stuk code totaal niet belangrijk. Ik vind leesbare code veel belangrijker dan het schrijven van een "one-liner".. En mijn voorbeeld is toch echt veel leesbaarder dan de jouwe. :)

[ Voor 5% gewijzigd door Question Mark op 10-07-2017 10:09 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

Question Mark schreef op maandag 10 juli 2017 @ 10:08:
Overigens vind ik aantal regels van een stuk code totaal niet belangrijk.
Ik wel, hoe wil je jouw code vanaf de command line uitvoeren ?
Question Mark schreef op maandag 10 juli 2017 @ 10:08:
En mijn voorbeeld is toch echt veel leesbaarder dan de jouwe. :)
Denk dat dat heel persoonlijk is..

[ Voor 44% gewijzigd door DukeBox op 10-07-2017 11:26 ]

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 14:40

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

DukeBox schreef op maandag 10 juli 2017 @ 11:25:
[...]

Ik wel, hoe wil je jouw code vanaf de command line uitvoeren ?
Gewoon vanuit Powershell? zoals het eigenlijk ook hoort... Ik lees ook nergens terug dat het verplicht vanuit een CMD commandline moet...
DukeBox schreef op maandag 10 juli 2017 @ 11:25:
Denk dat dat heel persoonlijk is..
Het punt is nu net dat code (zeker in grotere organisaties) niet persoonlijk is. Code moet dan makkelijk overdraagbaar zijn en ook door collega's onderhouden kunnen worden. Alleen daarom moet er in de code al goed gedocumenteerd worden. Dat red je niet in oneliners...

Leuk dat het kan, maar het maakt het niet altijd duidelijker.

[ Voor 11% gewijzigd door Question Mark op 10-07-2017 11:46 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • DanPa
  • Registratie: April 2015
  • Laatst online: 06-06-2024
Even nog een knuppel in het hoenderhok smijten ... waarom Power Shell wel en bvb. VBScripting niet? Of zijn er nog andere (en betere?) alternatieven? Let wel, ik ken er niets van maar hoop uit jullie discussies iets op te steken ;-)

Acties:
  • +1 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 17:06

DukeBox

loves wheat smoothies

Ik was misschien niet helemaal duidelijk, ik bedoel dat je dat met powershell al snel met een script moet doen, je kan niet domweg alle commando's achter elkaar plakken als er een loop in zit (toch?).
DanPa schreef op maandag 10 juli 2017 @ 11:58:
Even nog een knuppel in het hoenderhok smijten ... waarom Power Shell wel en bvb. VBScripting niet?
VB zit er een beetje tussenin. Sinds de komst van PS en de betere lagen in veiligheid is het niet handig VB te gebruiken. Daarnaast integreert PS ook veel beter met GPO's / GPP's.

[ Voor 36% gewijzigd door DukeBox op 10-07-2017 13:14 ]

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • +3 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 11:46
DanPa schreef op maandag 10 juli 2017 @ 11:58:
Even nog een knuppel in het hoenderhok smijten ... waarom Power Shell wel en bvb. VBScripting niet? Of zijn er nog andere (en betere?) alternatieven? Let wel, ik ken er niets van maar hoop uit jullie discussies iets op te steken ;-)
Simpele reden : VBScript is dood, Powershell is de toekomst. Zelfde gaat op voor batch.
Ik kan ook een bureau met een gewone schroevendraaier uit elkaar halen maar een accu boormachine is zoveel handiger.

Wat betreft zaken in één regel proppen : met Powershell is vrijwel alles wel dmv Oneliners te doen. Dit komt echter de leesbaarheid van je code niet ten goede (en ik heb voor mijn werk regelmatig scripts van bv 50 regels moeten refactoren naar 100+ regels. Weg met nested statements, veel zaken in variables stoppen etc. En dat alles om de leesbaarheid en dus ook de mogelijkheden om makkelijk aanpassingen te maken te bevorderen).

Een oneliner voor dit zou er in Powershell ongeveer als volgt uitzien (beetje pseudo code) :
code:
1
Get-Childitem -filter *.pdf | Foreach-Object {New-Item -Type Directory -Name $($_.Name).TrimEnd('.pdf'); Move-Item -Source $_.Name -Destination $($_.Name).TrimEnd('.pdf')}

En dan kan ik bv Foreach-Object nog vervangen voor %, Get-Childitem voor gci (of dir of ls) en de parameters kan ik ook nog inkorten. Komt dit de leesbaarheid ten goede? Absoluut niet.

NB : ook nog wat betreft het persé iets in 1 regel moeten uitvoeren : als je in Powershell (in de normale console host) een regel sluit met een { dan zal PS automatisch naar de volgende regel springen en je scriptblok pas uitvoeren na de laatse closing bracket. Er is dus absoluut geen reden te bedenken waarom iets als dit dmv een oneliner zou moeten.
Pagina: 1