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

有什么办法可以让它按顺序处理这些文件,目前我有一个解决方法,但这意味着我在以后使用图像时必须不断地更改一些脚本文件。我宁愿让所有文件都具有相同的“地形”名称,后面跟着递增的数字。

提前谢谢各位!

4

3 回答 3

1

您可能可以创建更多的批处理代码来按顺序“排序”数字,但是,由于您可以使用 imagemagick,我想您也可以下载其他东西。我的建议是您可以尝试使用 GNU 排序(在coreutils中)。然后在你的批次中,做一些这样的事情

伪代码:

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

您可能可以检查 Windows 附带的排序是否具有数字排序选项。(我最后一次检查它没有这个选项)。

于 2010-01-18T02:26:29.320 回答
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

很难找到,因为从文档中看并不是很明显。解决方案是将 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 回答