Пакетный файл DOS - цикл и приращение на 1 - PullRequest
2 голосов
/ 01 февраля 2011

У меня есть этот пакетный файл, который входит в SQL на удаленном компьютере, выполняет хранимую процедуру и затем отправляет вывод в текстовый файл.Я бы хотел, чтобы 3-й октет в IP-адресе и имя выходного текстового файла увеличивались на 1 и зацикливались, чтобы мне не приходилось повторять команду снова и снова.Кроме того, я хотел бы, чтобы это прекратилось, когда оно достигает определенного числа.Есть ли способ сделать это?

sqlcmd -U user -P password -S 192.168.1.2 -i c:\sql\storecreditfix.sql -o c:\sql\ouput01.txt
sqlcmd -U user -P password -S 192.168.2.2 -i c:\sql\storecreditfix.sql -o c:\sql\ouput02.txt
sqlcmd -U user -P password -S 192.168.3.2 -i c:\sql\storecreditfix.sql -o c:\sql\ouput03.txt
sqlcmd -U user -P password -S 192.168.4.2 -i c:\sql\storecreditfix.sql -o c:\sql\ouput04.txt
sqlcmd -U user -P password -S 192.168.5.2 -i c:\sql\storecreditfix.sql -o c:\sql\ouput05.txt

Ответы [ 3 ]

8 голосов
/ 01 февраля 2011

это будет делать то, что вы хотите.спецификатор / L говорит ему действовать как обычное программирование цикла.первый параметр - это начальное целое число, следующий - номер шага, а последний - количество.так что цикл будет начинаться с 1, увеличиваясь на 1 для 6 целых чисел:

@echo off
FOR /L %%G IN (1, 1, 6) DO (
     echo sqlcmd -U user -P password -S 192.168.%%G.2 -i c:\sql\storecreditfix.sql -o c:\sql\ouput0%%G.txt
)

, и если вы хотите сделать список IP вместо диапазона, вы можете опустить / L и просто перечислитьномера.например, FOR %% G IN (1,2,3,99,121) DO ...

очевидно, что "echo" перед sqlcmd только для тестирования;)

2 голосов
/ 01 февраля 2011

Если предположить, что вы на самом деле используете cmd.exe вместо MS-DOS, один из способов увеличить и проверить переменную заключается в следующем:

    @setlocal enableextensions enabledelayedexpansion
    @echo off
    set /a "i = 1"
:loop
    if !i! leq 15 (
        if !i! lss 10 (
            echo sqlcmd -S 192.168.!i!.2 -o c:\sql\ouput0!i!.txt
        ) else (
            echo sqlcmd -S 192.168.!i!.2 -o c:\sql\ouput!i!.txt
        )
        set /a "i = i + 1"
        goto :loop
    )
    endlocal

Это слегка измененная версия того, что вам нужно, которая отображает соответствующие биты, а не выполняет их, и выдает:

sqlcmd -S 192.168.1.2 -o c:\sql\ouput01.txt
sqlcmd -S 192.168.2.2 -o c:\sql\ouput02.txt
sqlcmd -S 192.168.3.2 -o c:\sql\ouput03.txt
sqlcmd -S 192.168.4.2 -o c:\sql\ouput04.txt
sqlcmd -S 192.168.5.2 -o c:\sql\ouput05.txt
sqlcmd -S 192.168.6.2 -o c:\sql\ouput06.txt
sqlcmd -S 192.168.7.2 -o c:\sql\ouput07.txt
sqlcmd -S 192.168.8.2 -o c:\sql\ouput08.txt
sqlcmd -S 192.168.9.2 -o c:\sql\ouput09.txt
sqlcmd -S 192.168.10.2 -o c:\sql\ouput10.txt
sqlcmd -S 192.168.11.2 -o c:\sql\ouput11.txt
sqlcmd -S 192.168.12.2 -o c:\sql\ouput12.txt
sqlcmd -S 192.168.13.2 -o c:\sql\ouput13.txt
sqlcmd -S 192.168.14.2 -o c:\sql\ouput14.txt
sqlcmd -S 192.168.15.2 -o c:\sql\ouput15.txt

Просто снимите echo со строки и настройте команду, чтобы вернуть остальные биты.

0 голосов
/ 01 февраля 2011

Если у вас есть доступ к cmd.exe, то у вас также есть доступ к cscript, который позволяет вам написать пакетный файл DOS на Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...