Windows BATCH filter med regex

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal gøre et flagermus script til at behandle fil en efter en, ifølge et nummer i filnavnet. Her er et eksempel på, hvad jeg kan få:



  1. CDEP\_0003.pdf

  2. CIM\_0001.pdf

  3. ESCALE\_0002.pdf



Det er muligt at loop og behandle hver af disse filer på en ordnet måde ved hjælp af regex eller noget som dette for at udelukke nummeret og bruge det som loop-indeks? (0001, 0002, 0003 osv ..)

Bedste reference


Gå simpelthen igennem .*0000.pdf$ til .*9999.pdf$ ved hjælp af et andet svar på, hvordan man løber gennem filer, der matcher wildcard i batchfil

Andre referencer 1


Du kunne



  • opbygger en række brugte numre ved først at gentage gennem filerne, eller

  • brug en optælling (for /l) fra 10000 til 19999 for at have
    førende nuller og tag de sidste 4 cifre.



Under forudsætning af, at der kun er et understreger foran nummeret:


@Echo off
Pushd "X:folder	ostart"
::clear array
for /f "delims==" \%\%A in ('Set No[ 2^>Nul') do Set "\%\%A=" 
:: fill array
for /f "tokens=2delims=\_." \%\%A in (
    'Dir /B "*\_????.pdf" ^| findstr "^.*\_[0-9][0-9][0-9][0-9].pdf$"'
) Do Set /A "No[\%\%A]=\%\%A"
:: process existing numbers
for /f "tokens=2 delims=[]" \%\%A in ('Set No[ 2^>Nul') do (
   Rem dir "*\_\%\%A.pdf" or whatever you want to do
)