在Windows中使用批处理文件复制同一文件的副本

3

我有一个文件夹里有35张图片,假设它的名字叫imageset。我想要创建每个文件的10份副本并且按顺序重新命名。我准备一张一张手动操作来完成这个任务。比如有一张名为img_01的图片。当我创建10份副本时,这些图片的名称将会像img_01, img_02, img_03 ... ... img_10。怎样才能完成这个任务呢?我尝试使用下面的代码,但是它没有起作用。到底是哪里出了问题呢?

@echo off
setlocal enableDelayedExpansion
SET count=10

SET filename=img_
SET start=1
SET extension=.jpg


SET source=%filename%%start%%extension%

FOR /L %%i IN (0, 1, %count%) DO (
  SET /a number=start+%%i

  SET destination=%filename%!number!%extension%
  echo !destination!

  REM ECHO %destination%
  COPY %source% %destination%
)

PAUSE 

它为什么不工作?除此之外,“copy”命令已被注释掉。 - Joey
Endoro,这会影响你解决问题的能力吗?令人印象深刻。 - Joey
@Јοеу 这真的相当影响了我的技能。用户不希望从我这里得到恶意代码。我期望在 Stack Overflow 上获得(虚拟)支付,而不是在其他论坛上... 我没有制定规则。:] - Endoro
1个回答

4

从你的解释中,似乎你想遍历文件夹中的所有图像,然后每个图像创建十个副本。以下代码可以实现:

setlocal enabledelayedexpansion
set count=10
for %%F in (*.jpg) do (
  for /l %%i in (1, 1, %count%) do (
    set num=0%%i
    set num=!num:~-2!
    copy "%%F" "%%~nF_!num!%%~xF"
  )
)

但是如果我也必须对img_02这样做呢?!我必须将其编号从img_11到img_20(因为在之前的批处理文件中已经创建了img_10)。 - SaberTooth
您需要进一步解释您需要做什么。 - foxidrive
2
使用简单的FOR循环是有风险的,因为它在执行任何迭代之前不会缓冲整个目录列表。这可能会导致例如将IMG_10.jpg作为IMG_01.jpg的其中一个副本之一,并且然后复制十个IMG_10.jpg等。要么应该用DIR /B替换循环为FOR /F,要么将副本放置在与源不同的文件夹中。 - dbenham

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