嗨,任何人都可以帮我解决这个问题。
我需要创建多个文件?我举了任何一个例子。在某些文件夹中,例如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
循环中的行不起作用
答案 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