DOS批处理文件未设置count的值

时间:2014-08-01 15:37:41

标签: c# batch-file

我有一个每周运行的批处理作业,用于计算员工一周内所花的钱。

WriteToDBIndex是一个C#程序,用于检查其他流程,例如财务是否已完成数据处理(即输入所有员工支出数据)。如果是,WriteToDBIndex,请在emptablestat表格中添加一行JobStatusName&如果输入了所有数据,则status

我需要继续检查这个,直到FINANCE & empstatus=1的计数为1。我的超时设置为3600秒。

@ECHO OFF
set ERRORLEVEL=0
REM start "" "C:\WriteToDBIndex.exe"
:gobackloop
set ct=0
if %ERRORLEVEL% NEQ 0 (
Echo There has been an error. 
goto end
)
if %ERRORLEVEL% EQU 0 (
Echo inside errorlevel zero
for /F "usebackq" %%i in (`sqlcmd -E -S "MYDATA\MYDB" -h-1 -Q "SELECT COUNT(*) FROM [dbo].[emptablestat] where JobStatusName like '%FINANCE%' and empstatus=1"`) do set ct=%%i 

if %ct% EQU 1 (
echo starting 1
start "" "C:\CalculateMoneySpent.exe"
timeout /t 60
) 
if %ct% EQU 0 (
timeout /t 3600
goto :gobackloop
)
)
:end
echo END
REM cd ..

即使我在emptablestat表中计数为1,变量 ct 的值也总是为零。我不知道为什么。

由于 [R

1 个答案:

答案 0 :(得分:0)

首先,阅读MC NDIF statement in batch causing issues. Works when ran individually?上写下的答案,因为它解释了为什么环境变量 ct 总是以低于for循环的值0读取if %ERRORLEVEL% EQU 0阻止。

其次,请参阅下面的批量代码,我根本无法测试,但希望有效。

@echo off
rem Running WriteToDBIndex.exe in a parallel process.
start "Write to DB index" "C:\WriteToDBIndex.exe"
if errorlevel 1 (
   echo Error: Failed to start WriteToDBIndex.exe!
   goto end
)

:gobackloop
set ct=0
for /F "usebackq" %%i in (`sqlcmd -E -S "MYDATA\MYDB" -h-1 -Q "SELECT COUNT(*) FROM [dbo].[emptablestat] where JobStatusName like '%FINANCE%' and empstatus=1"`) do set ct=%%i

if %ct% EQU 1 (
   rem Running CalculateMoneySpent in this process.
   "C:\CalculateMoneySpent.exe"
) else if %ct% EQU 0 (
   timeout.exe /t 3600
   goto gobackloop
)

:end
cd ..

我不确定为什么使用命令start在与此批处理并行运行的单独进程中运行WriteToDBIndex.exe

原因可能是WriteToDBIndex.exe运行时间很长,您希望在WriteToDBIndex.exe终止之前完成此批处理。

或者WriteToDBIndex.exe是一个Windows(GUI)应用程序,这是使用命令start的原因,虽然我不知道为什么不在这种情况下使用另外的参数/wait停止执行批处理文件,直到WriteToDBIndex.exe终止。

但是我想你已经使用了命令start,因为根本不知道使用或不使用start调用控制台应用程序的不同执行行为。因此,我进一步假设CalculateMoneySpent.exe是一个控制台应用程序,执行时间短,删除了命令start

How to call a batch file in the parent folder of current batch file?上查看我的答案,其中我解释了从批处理文件中开始调用另一个批处理文件/控制台/ GUI应用程序的4种可能性。