windows - Få vej af fundet fil i for loop

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gennemgå en mappe og dens undermapper, få alle .jpg filer og køre myapp.exe på de filer, hvor jeg omdøber den eksisterende fils forlængelse. myapp.exe tager den fulde filsti som input og en omdøbt fil som output, som sådan:


myapp.exe C:imagesoriginal210\_551\_210-768--RJF3823klzw.jpg -o C:imagesoriginal210\_551\_210-768--RJF3823klzw.gif


Jeg har nu dette til rekursivt at udskrive den fulde sti til *.jpg filer.


for /f "delims=" \%\%i in ('dir /a-d/b/s *.jpg') do echo "\%\%i" "\%\%~ni.gif"


Dette udskriver imidlertid kun filnavnet til den anden parameter, mens jeg vil medtage stien til den fundne fil.


Hvordan kan jeg inkludere stien til outputfilen, den anden parameter til myapp.exe?


pseudokode:


for /f "delims=" \%\%i in ('dir /a-d/b/s *.jpg') do myapp.exe "\%\%i" "<FULLPATH><FILNAME>.gif"

Bedste reference


Hvis myapp.exe faktisk konverterer filen i stedet for blot at ændre udvidelsen, kan du bruge metavariabel udvidelse, (se For /? til eksempler) :


For /F "Delims=" \%\%A In ('Dir /B/S/A-D *.jpg') Do myapp.exe "\%\%A" "\%\%~dpnA.gif"





Hvis du kun erstatter udvidelsen, kan du bare bruge kommandoen rename:


For /F "Delims=" \%\%A In ('Dir /B/S/A-D *.jpg') Do Ren "\%\%A" "\%\%~nA.gif"





I begge tilfælde kan du også ændre din for loop til:


For /R \%\%A In (*.jpg)