views:

132

answers:

2

Hey S.O Guys

I am currently trying to process a bunch of files with imagemagick using a batch file in windows, they are all numbered numerically as follows: image00 image01, image02, ..., image010, image011, ..., image0100, image0101

and so on, but when i try to process the file it wants to run though image00, image01, image010, image0100, image0101, image0102 and so on.

my code is as follows


SETLOCAL EnableDelayedExpansion
SET COUNT=0
FOR %%a in (*.bmp) DO
(
IF !ERRORLEVEL!==0
(
SET TFILE=0!COUNT!
SET TFILE=Terrain!TFILE:~-4!.jpg
SET /A COUNT+=1
ECHO %%a >output.txt
convert %%a -compress LOSSLESS !TFILE!
)
)

is there any way i can make it so that it will process these files in order, for the time being i have a work-around but it means that i continually have to change some script files when the images are used later on. I would much rather have all of the files be the same 'Terrain' name with incrementing number following.

Thanks in advance guys!

+1  A: 

you can probably create some more batch code to "sort" the numbers by order, however, since you can use imagemagick, i suppose you can also download other stuff. my suggestion is you can try and use GNU sort (in coreutils ). Then in your batch , do some thing like this

pseudocode :

for ... ( dir /b *bmp | gnu_sort -n ) do (
  echo "do your stuff"
)

you could probably check whether the sort that comes with Windows has a numerical sorting option. (the last time i check it doesn't have this option).

ghostdog74
+1  A: 

You could rename the files to be image000 image001, image002, ..., image010,

You could split up the file name something like this:

@echo off 

    setlocal ENABLEDELAYEDEXPANSION 

    if not defined TRACE (
        set TRACE=REM
    )

    %TRACE% On 

    for %%a In (data\*.*)  do call :EachFile %%a 


    endlocal

goto :eof 


:EachFile %%a 
    set Name=%~n1
    @Echo %Name%

    set NUm=%Name:~6,9%
    set /a Num=Num+100000
    @echo %Num%

    echo ren %1  %~dp1Image%Num%%~x1
goto :eof 
Andy Morris