2011-04-08 145 views
3

我要创建这样的如何在批处理中循环?

dup.bat infile outfile times 

例子用法是

dup.bat a.txt a5.txt 5 

它会创建文件a5.txt有a.txt中的重复内容的5倍

但我不知道如何做批量循环,如何做到这一点?

+0

我有点不确定你想要完成什么。只需获取a.txt的内容并将其粘贴5次到a5.txt中?如果是这样,我认为使用PowerShell和Get-Content调用会更合适。作为参考,虽然批量循环只是为了。 http://ss64.com/nt/for.html – 2011-04-08 18:06:13

+0

@Mike Soule批次是mor通用,我知道它可以使用它来完成。 – IAdapter 2011-04-08 20:24:03

回答

10

你可以做这样的循环:

SET infile=%1 
SET outfile=%2 
SET times=%3 

FOR /L %%i IN (1,1,%times%) DO (
    REM do what you need here 
    ECHO %infile% 
    ECHO %outfile% 
) 

然后把输入文件和重复它,你可以使用MORE与重定向到输入文件的内容附加到输出文件。请注意,这是假定这些是文本文件。

@ECHO off 
SET infile=%1 
SET outfile=%2 
SET times=%3 

IF EXIST %outfile% DEL %outfile% 
FOR /L %%i IN (1,1,%times%) DO (
    MORE %infile% >> %outfile% 
) 
3

对于命令行参数

set input=%1 
set output=%2 
set times=%3 

要为循环做一个简单的,从input文件中读取和写入output文件:

FOR /L %%i IN (1,1,%times%) DO (
    FOR /F %%j IN (%input%) DO (
     @echo %%j >> %output% 
    )  
) 

而不是采取在一个输出文件,你也可以通过命令行来完成:

dup.bat a.txt 5 > a5.txt 
0

叹息

紧凑的设计:

SETLOCAL ENABLEDELAYEDEXPANSION 
SET times=5 
:Beginning 
IF %times% NEQ 0 (TYPE a.txt>>a5.txt & SET /a times=%times%-1 & GOTO Beginning) ELSE (ENDLOCAL & set times= & GOTO:eof) 

轻松阅读:

SETLOCAL ENABLEDELAYEDEXPANSION 
SET times=5 
:Beginning 
IF %times% NEQ 0 (
TYPE a.txt>>a5.txt 
SET /a times=%times%-1 
GOTO Beginning 
) ELSE (
ENDLOCAL 
set times= 
GOTO:eof 
) 

设置你的计数器(次= 5) 启动子程序开始 如果计数器不等于0,读取a.txt并将其内容添加到a5.txt,然后将您的计数器减1。这将重复五次,直到您的计数器r等于0,那么它会清理你的变量并结束脚本。 SET ENABLEDELAYEDEXPANSION对于在循环内增加变量很重要。