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

问题描述:

嗨谁能帮我解决这个问题。使用批处理文件创建多个文件

我需要创建多个文件?我给任何例子。在某个文件夹中,比如文件夹记录。 “记录”文件夹按名称“example2tought1023.au”包含1个文件。我需要生成相同的文件包含,多次只需增加数字。

我应该得到导致这样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循环线路不工作

+0

@ user3163527欢迎来到SO!这是一种常用的技术,只需简单地“ECHO”所需的更改,以便OP可以验证命令是否正确。在这种情况下,'COPY'命令是'REM'出来的。所有你需要做的就是一旦你确认结果被正确回应,从'COPY'行删除'REM'。这可以确保没有任何事情发生*(如观察到的),直到它被验证。你会发现你的问题已被标记为“不是答案”。这个是正常的。我们知道你没有足够的代表回应评论。 – Magoo 2014-01-05 23:01:56

你有误识别哪些行不工作:-)

您有相对的问题当变量被扩展时变得更加艰难。使用百分比进行正常扩展时,会在解析该行时发生,并且您的整个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 
+0

看着他的期望输出的例子,似乎他真的只是想每次加1,而不是%%我(这将最终加入1,2,3,4,5 ....) – SeanC 2012-08-08 15:09:28

+0

@SeanCheshire - Look小心 - 我将%% i添加到START值并将其分配给NUMBER变量,因此它提供了正确的值。我这样做是因为OP是如何构造原始代码的。我编辑之前的版本更符合你所描述的内容,只需递增一个值即可。但是这两种方法都有相同的结果。 – dbenham 2012-08-08 15:14:24

+0

啊 - 好的。我*方式*更习惯于递增,而不是添加到基数:D – SeanC 2012-08-08 15:18:19