批处理以检查两个中的第一个脚本是否已完全创建.csv文件,然后执行第二个脚本

时间:2014-08-19 10:53:02

标签: batch-file

我有两个脚本。第一个脚本创建.csv文件,用作第二个脚本的输入。

有人可以让我知道我需要在下面两行之间写下哪些额外的步骤,以便第二个脚本只在第一个脚本完全写入.csv格式的所有文件时才开始执行。

start "" /wait /b "D:\ITSMaaS\BTscripts\capgemini\BESExtract\bin\BES_EXTRACT.exe" "-f D:\ITSMaaS\BTscripts\capgemini\BESExtract\conf\BES_EXTRACT.CONF"
start "" /wait /b "D:\ITSMaaS\BTscripts\capgemini\BESExtract\bin\BES_DATA_MAP.exe" "-f D:\ITSMaaS\BTscripts\capgemini\BESExtract\conf\BES_DATA_MAP.conf"

2 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情。它循环直到“BES_EXTRACT.exe”进程完成。当任务运行时%ERRORLEVEL%将在任务结束时为“0”%ERRORLEVEL%将变为“1”并且循环将结束。因此,当“BES_EXTRACT.exe”完成时,%ERRORLEVEL%将更改为“1”并且“BES_DATA_MAP.exe”将启动

Echo Date:%date% Time:%time% >> error.txt
    @echo off 
    (
    Echo Date:%date% Time:%time%
            start "" /wait /b "D:\ITSMaaS\BTscripts\capgemini\BESExtract\bin\BES_EXTRACT.exe" "-f D:\ITSMaaS\BTscripts\capgemini\BESExtract\conf\BES_EXTRACT.CONF"
             :loop
            for /f "tokens=2 delims=: " %%a in ('tasklist ^| find "BES_EXTRACT.exe"' ) do (
                if "%ERRORLEVEL%"=="0" (
                    ping -n 10 localhost > nul 2>nul
                    goto loop
                )
            )
            start "" /wait /b "D:\ITSMaaS\BTscripts\capgemini\BESExtract\bin\BES_DATA_MAP.exe" "-f D:\ITSMaaS\BTscripts\capgemini\BESExtract\conf\BES_DATA_MAP.conf"
        ) >> Output.txt 2>> error.txt

<强>解释 for循环使用“tasklist”和find命令来检查任务“BES_EXTRACT.exe”是否正在运行,如果它正在运行它将%ERRORLEVEL%设置为“0”。如果%ERRORLEVEL%为“0”,则脚本将ping你的PC 10次,然后再返回并再次启动for循环,Ping命令只计算10秒(每次ping是1秒)然后第一个脚本完成for循环将%ERRORLEVEL%设置为“1”,结束循环并启动第二个脚本。如果你需要更多的解释,这是对剧本的简短解释,请告诉我:)

答案 1 :(得分:0)

您是否在没有start命令的情况下尝试过? 正常的命令行程序将暂停,直到执行下一行之前完成。

@echo off
"D:\ITSMaaS\BTscripts\capgemini\BESExtract\bin\BES_EXTRACT.exe" "-f D:\ITSMaaS\BTscripts\capgemini\BESExtract\conf\BES_EXTRACT.CONF"
"D:\ITSMaaS\BTscripts\capgemini\BESExtract\bin\BES_DATA_MAP.exe" "-f D:\ITSMaaS\BTscripts\capgemini\BESExtract\conf\BES_DATA_MAP.conf"