как сделать цикл в пакетном режиме? - PullRequest
3 голосов
/ 08 апреля 2011

Я хочу создать что-то вроде этого

dup.bat infile outfile times

пример использования будет

dup.bat a.txt a5.txt 5

при этом создаст файл a5.txt с содержанием a.txt, повторенным 5 раз

однако я не знаю, как сделать для цикла в партии, как это сделать?

Ответы [ 3 ]

11 голосов
/ 08 апреля 2011

Вы можете сделать цикл следующим образом:

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 голосов
/ 08 апреля 2011

Для аргументов командной строки

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

Чтобы выполнить простой цикл for, прочитайте файл 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 голосов
/ 08 июня 2011

вздох

Компактный дизайн:

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. Это будет повторяться пять раз, пока ваш счетчик не станет равным 0, тогда он очистит вашу переменную и завершит работускрипт.SET ENABLEDELAYEDEXPANSION важен для приращения переменных внутри циклов.

...