2

私は現在、Windowsでバッチファイルを使用してimagemagickで一連のファイルを処理しようとしています.image00 image01、image02、...、image010、image011、...、image0100、image0101

などですが、ファイルを処理しようとすると、image00、image01、image010、image0100、image0101、image0102 などを実行します。

私のコードは次のとおりです


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

これらのファイルを順番に処理するようにする方法はありますか?当面は回避策がありますが、後で画像を使用するときにいくつかのスクリプト ファイルを継続的に変更する必要があることを意味します。すべてのファイルを同じ 'Terrain' 名にし、それに続く番号を増やしたいと思います。

よろしくお願いします!

4

3 に答える 3

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
于 2011-05-05T09:04:20.747 に答える
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 
于 2010-01-18T11:30:41.787 に答える
1

おそらく、数字を順番に「ソート」するバッチコードをさらに作成できますが、imagemagickを使用できるため、他のものもダウンロードできると思います。私の提案は、( coreutilsで)GNU sort を試して使用できることです。次に、バッチで、次のようなことを行います

擬似コード:

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

おそらく、Windows に付属の並べ替えに数値並べ替えオプションがあるかどうかを確認できます。(最後にチェックしたとき、このオプションはありません)。

于 2010-01-18T02:26:29.320 に答える