2011-04-08 119 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對於在循環內增加變量很重要。