2010-01-18 25 views
2

我目前正在處理中的窗口一堆使用批處理文件ImageMagick的 文件,它們都用數字編號爲 如下: image00 image01, image02, ..., image010, image011, ..., image0100, image0101批處理文件:處理在alphbetical文件(數值可能>)令

等等,但是當我嘗試處理就是了雖然 image00運行該文件,image01, image010,image0100,image0101,image0 102等。

我的代碼如下


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!
)
)

有沒有什麼辦法可以讓這個它會爲了處理這些文件,暫時我有一個變通方法,但它意味着,當圖像稍後使用時,我不斷需要更改一些腳本文件。我寧願讓所有的文件都是相同的「地形」名稱,後面跟着遞增的數字。

在此先感謝你們!

+0

爲什麼它關係到文件處理的順序? –

+0

那麼我的代碼需要更大的圖像,並得到一個子圖像決定經度和latiude和像素每分鐘,然後將它們分成更小的圖像和數字他們,我想採取這些圖像,重命名他們,並保持他們在相同的數字順序,我正在使用一個計數器,但稍微改變了我的操作方式,現在正在使用子字符串,所以它們處理的順序無關緊要。 – Craig

回答

1

你可以創建一些更多的批處理代碼來按順序「排序」數字,但是,因爲你可以使用imagemagick,我想你也可以下載其他的東西。我的建議是你可以嘗試使用GNU排序(在coreutils)。然後在你的批次,做一些這樣的事

僞代碼:

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

你很可能檢查Windows自帶的排序是否具有數字排序選項。 (我最後一次檢查它沒有這個選項)。

1

你可以將文件重命名爲image000 image001,image002,...,image010,

你可以分割的文件名是這樣的:

@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 
1

這是很難找到的,因爲這從文檔中並不是很明顯。解決方案是將FOR命令與dir命令結合使用。我會做這樣的事情:

@echo off 
ECHO Listed in name order: %1 
ECHO ------------------------------------------------------ 
FOR /F "tokens=*" %%G IN ('dir /b /o:n %1') DO echo %%G