Bestanden op basis van Excel waarde verwijderen.

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Frogy
  • Registratie: Juni 2005
  • Laatst online: 13-01 15:37
Ik weet niet of dit het juiste topic is maar anders mag hij verplaasts worden.

Ik heb een Excel bestand met artikelen en daarbij een waarde ja of nee.
ik heb een dir met .jpg bestanden, deze files hebben als naam de zelfde naam als het artikel.
dus artikel 1010008 heeft als afbeelding 101008.jpg
nu begint de lijst met afbeeldingen erg groot te worden en wil ik op basis van de waarde nee de bestanden uit te dir halen.
Iemand een idee hoe dit te doen? Bestanden mogen ook naar een (sub) dir verplaatst worden.
het liefst middels cmd of een ander script.

[ Voor 5% gewijzigd door Frogy op 30-12-2019 15:42 ]

Beste antwoord (via Frogy op 15-01-2020 10:05)


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
ALS (voorbeeld):
- de foto's (alle met de extensie .jpg) in deze map staan: C:\Users\Username\Documents\my_images
- de namen van de foto's (zonder .jpg) in een Excelmap in Blad1 staan in A2:A400 en "ja of "nee" in B2:B400, kun je deze macro gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Verwijder_files()
Dim MyFSO As FileSystemObject, mf As String, a As Integer, b As Integer
Dim MyFile As File, MyFolder As Folder, myrange As Range
Set MyFSO = New Scripting.FileSystemObject
Set myfolder = myfso.GetFolder("C:\Users\Username\Documents\my_images\")
Set myrange = Sheets("Blad1").Range("A2:A400")
a = 0
For Each MyFile In MyFolder.Files
mf = Left(MyFile.Name, Len(MyFile.Name) - 4)
b = Application.CountIf(myrange, mf)
If b > 0 Then
r = Application.Match(mf, myrange, 0)
If LCase(myrange(r, 1).Offset(, 1)) = "nee" Then
MyFile.Delete
Rows(myrange(r, 1).Row).EntireRow.Delete
a = a + 1
End If
End If
Next MyFile
MsgBox ("Er werden " & a & " bestanden verwijderd.")
End Sub

Alle reacties


Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:04

The Eagle

I wear my sunglasses at night

Middels een script is prima te doen idd. Maar als je dacht dat we dat voor je gingen doen heb je het echter mis ;)

Ik zou zelf in excel met wat filter, kopieer en plakwerk de bestandsnamen pakken, en dan een kolom er voor en achter met het samengestelde commando om ze te moven naar de juiste directory, of te verwijderen.
Worden gewoon veel commando's dan, copy/past die weer naar een .cmd scriptje en gaan.

Oh ja, notepad++ is je vriend ;)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • Frogy
  • Registratie: Juni 2005
  • Laatst online: 13-01 15:37
The Eagle schreef op maandag 30 december 2019 @ 15:43:
Middels een script is prima te doen idd. Maar als je dacht dat we dat voor je gingen doen heb je het echter mis ;)

Ik zou zelf in excel met wat filter, kopieer en plakwerk de bestandsnamen pakken, en dan een kolom er voor en achter met het samengestelde commando om ze te moven naar de juiste directory, of te verwijderen.
Worden gewoon veel commando's dan, copy/past die weer naar een .cmd scriptje en gaan.

Oh ja, notepad++ is je vriend ;)
Wat bedoel je met samengestelde commando?

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Wat @The Eagle zegt ja: dit is prima mogelijk met een VBA script, maar best kans dat handwerk sneller is als je geen VBA-kennis hebt. En als je geen VBA-kennis hebt dan wil je heel erg niet bestanden gaan verwijderen met VBA.

Samengesteld:
in cel A1 staat "delete"
in cel B1 staat "bla.jpg"

Dan kopieer je A1 en B1, plak in een commandprompt en het file is weg. Of beter: test eerst ;) Na goed testen kan je dan vele regels tegelijk copypasten.

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


Acties:
  • 0 Henk 'm!

  • Oogje
  • Registratie: Oktober 2003
  • Niet online
Of je Excel file wegschrijven als csv en dan met Powershell aan de gang, de mogelijkheden zijn eindeloos:)

[ Voor 7% gewijzigd door Oogje op 30-12-2019 15:57 ]

Any errors in spelling, tact, or fact are transmission errors.


Acties:
  • 0 Henk 'm!

  • Frogy
  • Registratie: Juni 2005
  • Laatst online: 13-01 15:37
de functie samenvoegen in Excel ben ik ook bekend mee, maar dan wordt het dus erg veel handwerk.
Ook omdat het assortiment dagelijks met 40 artikelen wijzigt wil ik dit graag automatiseren.

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
ALS (voorbeeld):
- de foto's (alle met de extensie .jpg) in deze map staan: C:\Users\Username\Documents\my_images
- de namen van de foto's (zonder .jpg) in een Excelmap in Blad1 staan in A2:A400 en "ja of "nee" in B2:B400, kun je deze macro gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Verwijder_files()
Dim MyFSO As FileSystemObject, mf As String, a As Integer, b As Integer
Dim MyFile As File, MyFolder As Folder, myrange As Range
Set MyFSO = New Scripting.FileSystemObject
Set myfolder = myfso.GetFolder("C:\Users\Username\Documents\my_images\")
Set myrange = Sheets("Blad1").Range("A2:A400")
a = 0
For Each MyFile In MyFolder.Files
mf = Left(MyFile.Name, Len(MyFile.Name) - 4)
b = Application.CountIf(myrange, mf)
If b > 0 Then
r = Application.Match(mf, myrange, 0)
If LCase(myrange(r, 1).Offset(, 1)) = "nee" Then
MyFile.Delete
Rows(myrange(r, 1).Row).EntireRow.Delete
a = a + 1
End If
End If
Next MyFile
MsgBox ("Er werden " & a & " bestanden verwijderd.")
End Sub
Pagina: 1