Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Batch script: For loop over folders alfabetisch laten werken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een batch scriptje in Windows XP en ik moet een loop doen over een aantal folders en voor elke folder een bewerking uitvoeren. Het valt mij op dat als de het batch bestand en de folders op een lokale disk staan, ze in alfabetische volgorde verwerkt worden, maar zodra ik ze op een externe USB disk of CD zet, dan wordt de volgorde bepaalt door de tijd waarop ze gemaakt waren.

Is iemand bekend met dit verschijnsel? Kun je in een batch bestand aangeven hoe je de sortering wil hebben?

code:
1
2
3
@echo off

for /D %%d in (*) do echo %%d

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

alt-92

ye olde farte

Dat is afhankelijk van het filesystem :)
CDFS <> FAT32 <> NTFS.

Een andere oplossing is dat je gaat kijken naar een scripttaal waarmee je de folders in een array zet en die sorteert op alfabet.
VBscript is in ieder geval native aanwezig op moderne Windows OS'sen, en die biedt die ondersteuning sowieso al.

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


  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 00:43
Je zou het DIR commando kunnen gebruiken, dan kun je met de /O switch de volgorde aangeven, bijvoorbeeld:

code:
1
2
3
@ECHO OFF

FOR /F %%A IN ('DIR /AD /OD /B /S') DO ECHO %%A

Switches zijn respectievelijk: Mapen weergeven, sorteren op datum (oudste eerst), kale weergave, recursief. Weet alleen niet hoe precies omgegaan wordt met de volgorde bij submappen.

Verwijderd

Topicstarter
alt-92 schreef op zaterdag 04 oktober 2008 @ 11:49:
Dat is afhankelijk van het filesystem :)
CDFS <> FAT32 <> NTFS.
In ieder geval zijn zowel mijn interne disk als mijn externe disk NTFS, en toch is er een verschil...

Verwijderd

Topicstarter
Nielson schreef op zaterdag 04 oktober 2008 @ 11:50:
Je zou het DIR commando kunnen gebruiken, dan kun je met de /O switch de volgorde aangeven, bijvoorbeeld:
Dat gaat werken, bedankt! Enige probleem is nog mappen met een spatie in de naam, de variabele wordt dan alleen gevuld met het eerste woord. Ik denk dat ik dat met delims op kan lossen, aangezien het dir commando na elke folder een nieuwe regel begint. Ik heb alleen geen idee hoe ik dat met delim aan moet geven. Ik probeerde al "delims=CRLF" en "delims=\r\n" maar beiden werken niet zoals gehoopt.

Edit:
Ok met "eol=/ delims=/" kan je aangeven dat de for de input van het dir commande op nieuwe regels moet breken en niet op spaties. Bedankt!

code:
1
for /f "delims=/ eol=/" %%d in ('dir /AD /ON /B') do ...

[ Voor 15% gewijzigd door Verwijderd op 04-10-2008 12:28 ]


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

alt-92

ye olde farte

Verwijderd schreef op zaterdag 04 oktober 2008 @ 12:03:
[...]


In ieder geval zijn zowel mijn interne disk als mijn externe disk NTFS, en toch is er een verschil...
Maar een externe disk is removable storage, net als een CD.

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


  • Nielson
  • Registratie: Juni 2001
  • Laatst online: 00:43
Verwijderd schreef op zaterdag 04 oktober 2008 @ 12:21:
[...]


Dat gaat werken, bedankt! Enige probleem is nog mappen met een spatie in de naam, de variabele wordt dan alleen gevuld met het eerste woord. Ik denk dat ik dat met delims op kan lossen, aangezien het dir commando na elke folder een nieuwe regel begint. Ik heb alleen geen idee hoe ik dat met delim aan moet geven. Ik probeerde al "delims=CRLF" en "delims=\r\n" maar beiden werken niet zoals gehoopt.
Volgens mij kun je dan gewoon tokens=* gebruiken.

Verwijderd

Topicstarter
@Nielson

Ik heb 'em nu zo en dit werkt:

code:
1
for /f "delims=/ eol=/" %%d in ('dir /AD /ON /B') do ...


Bedankt voor je antwoorden!
Pagina: 1