批处理文件:以alphbetical(NUM可能>)顺序处理文件

时间:2010-01-18 02:19:00

标签: windows image batch-file alphabetical

我目前正在尝试使用imagemagick处理一堆文件 在Windows中使用批处理文件,它们都以数字编号为 如下: 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'名称,后面跟着递增的数字。

先谢谢你们!

3 个答案:

答案 0 :(得分:1)

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

伪代码:

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

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

答案 1 :(得分: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 

答案 2 :(得分: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