1

嗨,谁能帮我解决这个问题。

我需要创建多个文件??我举个例子。在某个文件夹中,说文件夹记录。“记录”文件夹包含 1 个名为“example2tought1023.au”的文件。我需要通过增加数字多次生成相同的文件包含。

我应该得到这样的结果 example2tought1023.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循环中的行不起作用

4

1 回答 1

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 计数。

在 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
于 2012-08-08T14:47:47.123 回答