在批处理文件

时间:2018-04-05 19:12:44

标签: windows loops batch-file

我正在编写一个批处理文件来启动和停止我在我的机器上运行的不同Oracle数据库实例。如果每个数据库都通过TestDB11调用TestDB1,我想首先询问我想要启动哪个数据库实例,启动该实例,然后遍历除该实例之外的所有其他实例并停止它们。我很接近,但我觉得我在FOR循环结构中遗漏了一些东西。这是我的代码:

TITLE Service and Server Starter
@ECHO OFF

:startQuestion
CHOICE /M "Would you like to start a specific DB instance"
IF errorlevel 2 GOTO :end
IF errorlevel 1 GOTO :dbStart

:dbStart
set /P instance=Please Enter the Test Instance Name:
IF /I "%instance%"=="" GOTO :dbStart
net start OracleJobScheduler"%instance%"
net start OracleService"%instance%"
net start OracleVssWriter"%instance%" 
CALL :dbEndTest1 "%instance%"
GOTO :EOF

:dbEndTest1
set pass=%~1
set var=%pass:~-1%
FOR /L %%n in (1,1,11) DO (
    CALL :dbEndTest2 %%n "%var%")

:dbEndTest2
set var=%~1
set instance=%~2
IF NOT "%var%"=="%instance%" (
        @ECHO "Stopping Test%var%"
        sc stop OracleJobSchedulerTest"%var%"
        sc stop OracleServiceTest"%var%"
        sc stop OracleVssWriterTest"%var%"
    )
)
exit /B

:entryError
set /P Error=Please enter a y or n for your server start.
IF /I "%Error%"=="" GOTO :startQuestion

:end

我现在得到的输出是说我想要启动TestDB2,我输入TestDB1来回答问题,这3个服务将开始。

然后它将移动到:dbEndTest1,它将正确地拉出字符串中的最后一个字符,在本例中为“2”,进入FOR循环,并开始停止第一个实例,如果它正在运行,这将是TestDB1。然后它跳转到:entryError点并停止,期待响应。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我在上面的初始问题中发布了我的最终工作代码。感谢aschipfl的帮助!