使用批处理文件创建多个文件

时间:2012-08-08 07:53:19

标签: batch-file

嗨,任何人都可以帮我解决这个问题。

我需要创建多个文件?我举了任何一个例子。在某些文件夹中,例如Folder Records。 “Record”文件夹包含1个名称为“example2tought1023.au”的文件。我需要通过增加数字来生成相同的文件包含,多次。

我应该得到像这样的结果2tought1023.au example3tought1024.au example4tought1025.au example5tought1026.au

这就是我目前所拥有的:

SET count=9

SET filename_1=example
SET filename_2=thought

SET extension=.au

SET start_1=2
SET start_2=1023

SET source=%filename_1%%start_1%%filename_2%%start_2%%extension%

FOR /L %%i IN (1, 1, %count%) DO (
  REM These two lines do not work!
  SET /a n=%start_1%+%%i
  SET /a number_2=%start_2% + %%i

  SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension%

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

PAUSE

FOR /L循环中的行不起作用

1 个答案:

答案 0 :(得分:2)

您错误地识别了哪些行不起作用: - )

您遇到的问题与何时扩展变量有关。解析行时会使用百分比进行正常扩展,并且一次性解析整个FOR语句(包括带括号的DO子句)。所以以下一行

SET destination=%filename_1%%number_1%%filename_2%%number_2%%extension%

在执行循环之前,会看到存在的%number_1%和%number_2%的值。显然不是你想要的。解决方案很简单 - 您需要使用延迟扩展(运行时的值而不是解析时间)。您可以使用setlocal enableDelayedExpansion启用延迟展开,然后使用!number_1!代替%number_1%

您与变量名称(n vs number_1)不一致。

我认为你想要从0到count-1而不是从1到count。

在SET / A表达式中使用变量时,不必显式扩展变量。您可以简单地使用变量名称而不使用百分比或感叹号。但这仅适用于SET / A命令。

您还可以使用单个SET / A命令执行多个计算和分配,方法是在每个分配之间使用逗号。

@echo off
setlocal enableDelayedExpansion

REM counts from 0 to count, so 8 = 9 copies
set count=8

set filename_1=example
set filename_2=thought

set extension=.au

set start_1=2
set start_2=1023

set source=%filename_1%%start_1%%filename_2%%start_2%%extension%

for /L %%i in (0, 1, %count%) do (
  set /a "number_1=start_1+%%i, number_2=start_2+%%i"
  set destination=%filename_1%!number_1!%filename_2%!number_2!%extension%
  echo !destination!
  REM copy %source% !destination!
)

pause