英文:
How to merge files with partial matches of filename to numeric range in ImageMagick
问题
以下是翻译好的内容:
有一系列编号的文件:
out0001.tif, out0002.tif, ..., out0100.tif, out0101.tif, ..., out2300.tif
我想将它们合并成分层的tif文件(使用ImageMagick convert),每个文件应包含100个层。例如:
merged_1-100.tif, merged_100-200.tif, ...
当我运行以下命令时,它尝试将所有tif文件组合成一个庞大的文件,但我只需要前100个:
convert out00??.tif out0100.tif -adjoin merged_1-100.tif
我需要在命令中进行哪些修改?
英文:
There are a list of numbered files:
out0001.tif, out0002.tif, ..., out0100.tif, out0101.tif, ..., out2300.tif
And I'd like to merged them into layered tif (using ImageMagick convert) that should contain 100 layers. E. g.
merged_1-100.tif, merged_100-200.tif, ...
When I run the following cmd, it try to group all tifs in one huge, but I need only first hundred:
convert out00??.tif out0100.tif -adjoin merged_1-100.tif
What I need to modify in the command?
答案1
得分: 0
I found a solution using a batch file.
@echo off
set file_list=
set /a start_index=1
set /a finish_index=100
for /l %%G in (%start_index%,1,%finish_index%) do call :make-filelist %%G
rem Check
echo %file_list%
pause
rem Make conversion
convert %file_list% -adjoin merged_%start_index%-%finish_index%.tif
goto :eof
:make-filelist
rem Add leading zeros
set "fn=0000%1"
set "fn=%fn:~-4%"
rem Add filename to list of files
set "file_list=%file_list%out%fn%.tif "
goto :eof
It allows using any range of file indexes. To do so it is necessary to change start_index
and finish_index
.
英文:
I found a solution using a batch file.
@echo off
set file_list=
set /a start_index=1
set /a finish_index=100
for /l %%G in (%start_index%,1,%finish_index%) do call :make-filelist %%G
rem Check
echo %file_list%
pause
rem Make conversion
convert %file_list% -adjoin merged_%start_index%-%finish_index%.tif
goto :eof
:make-filelist
rem Add leading zeros
set "fn=0000%1"
set "fn=%fn:~-4%"
rem Add filename to list of files
set "file_list=%file_list%out%fn%.tif "
goto :eof
It allows using any range of file indexes. To do so it is necessary to change start_index
and finish_index
.
答案2
得分: 0
这个解决方案处理磁盘上的所有文件,并自动为输出文件生成正确的(有序的)名称。
@echo off
setlocal
set "hundred=100"
:nextHundred
if not exist out%hundred:~1%01.tif goto :EOF
echo Merging hundred %hundred:~1%
set /A "next=hundred+1"
convert out%hundred:~1%*.tif[0-99] out%next:~1%00.tif -adjoin merged_%hundred:~1%01-%next:~1%00
set "hundred=%next%"
goto nextHundred
我没有测试这个解决方案,因为我没有convert
应用程序和数据文件。这个解决方案依赖于提问者发布的“convert out*.tif[0-99]将按字母顺序获取前100个文件”的评论。
英文:
This solution process all files existent on disk and automatically generates the correct (ordered) names for the output files.
@echo off
setlocal
set "hundred=100"
:nextHundred
if not exist out%hundred:~1%01.tif goto :EOF
echo Merging hundred %hundred:~1%
set /A "next=hundred+1"
convert out%hundred:~1%*.tif[0-99] out%next:~1%00.tif -adjoin merged_%hundred:~1%01-%next:~1%00
set "hundred=%next%"
goto nextHundred
I have not tested this solution because I have not convert
application nor data files. This solution relies on the "convert out*.tif[0-99] will get the first 100 files in alphabetic order" comment posted by the OP.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论