Windows批处理脚本复制图像序列中的文件

3
我需要一些帮助创建一个在Windows下批量重命名脚本。
我有一个图像文件夹,按3个顺序编号,例如:
test_01.001.tif test_01.004.tif test_01.007.tif
以此类推。
我的目标是将每个图像复制并重命名两次,以填补其后缺失的图像,使整个图像序列完整。举例来说,
test_01.001.tif 将被复制两次,并重命名为:
test_01.002.tif 和 test_01.003.tif
对于整个图像序列都是这样(总共到200)。
非常感谢任何帮助!
4个回答

1

试试这个:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-3 delims=." %%a in ('dir /B /A-D *.*.tif') do (
   set /A new1=1%%b+1, new2=new1+1
   copy "%%a.%%b.%%c" "%%a.!new1:~1!.%%c"
   copy "%%a.%%b.%%c" "%%a.!new2:~1!.%%c"
)

0

未经测试

@echo off
pushd "C:\the_folder_with_the_images"

setlocal enableDelayedExpansion
for /l %%l in (1 ; 3 ; 201) do (
   set current_number=%%l
   set next_number=%%l+1
   set next_next_number=%%l+2
   if %%l lss 100 (
     set current_number=0%%l
   )
   if %%l lss 10 (
     set current_number=0%%l
   ) 

   if !next_number! lss 100 (
     set next_number=0%%l
   )
   if !next_number! lss 10 (
     set next_number=0%%l
   )

   if !next_next_number! lss 100 (
     set next_next_number=0%%l
   )
   if !next_next_number! lss 10 (
     set next_next_number=0%%l
   ) 
   copy test_01.!current_number!.tif test_01.!next_number!.tif
   copy test_01.!current_number!.tif test_01.!next_next_number!.tif
)

endlocal

不错的方法... pushdfor /l 可能是最好的选择。 :D - Albert F D

0
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "basename=test_01."
FOR /l %%a IN (1001,3,1997) DO (
 SET /a filename=%%a
 IF EXIST "%sourcedir%\%basename%!filename:~-3!.tif" (
  SET /a new1=1+%%a
  SET /a new2=2+%%a
  ECHO(COPY /b "%sourcedir%\%basename%!filename:~-3!.tif" "%sourcedir%\%basename%!new1:~-3!.tif"
  ECHO(COPY /b "%sourcedir%\%basename%!filename:~-3!.tif" "%sourcedir%\%basename%!new2:~-3!.tif"
 ) else GOTO :EOF 
)
GOTO :EOF

您需要更改sourcedir的设置以适应您的情况。

所需的COPY命令仅用于测试目的而已。在您验证了命令正确之后,请将ECHO(COPY更改为COPY以实际复制文件。添加>nul以抑制报告消息(例如1 file copied

该过程将%%a从1001变化到1997,步长为3。如果找不到键名后三位是%%a的文件,则终止,否则将1和2添加到%%中,得到两个所需的新文件,并使用相同的子字符串技术进行复制。


0

另一种非常定制化的方法可能是:

@echo off
setlocal enabledelayedexpansion    
set iter=1
set count=1

for %%i in (C:\TEST\*.tif) do (
set name=%%~dpni
pause     
    if %count%==%iter% (
        if !count! lss 10 (
        set /a count+=1
        copy "%%i" "!name:~0,-1!!count!%%~xi"
        set /a count+=1
        copy "%%i" "!name:~0,-1!!count!%%~xi"
        set /a count+=1
        )
        if !count! geq 10 if !count! lss 100 (
        set /a count+=1
        copy "%%i" "!name:~0,-2!!count!%%~xi"
        set /a count+=1
        copy "%%i" "!name:~0,-2!!count!%%~xi"
        set /a count+=1
        )
        if !count! geq 100 if !count! lss 1000 (
        set /a count+=1
        copy "%%i" "!name:~0,-3!!count!%%~xi"
        set /a count+=1
        copy "%%i" "!name:~0,-3!!count!%%~xi"
        set /a count+=1
        )

    ) else (
    set /a iter+=1
    )
)
pause

TEST路径更改为与您的*.tif文件相关的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接