Мой командный файл, который запускает другой командный файл, не будет ждать до завершения первого (с использованием команды / WAIT). Может ли кто-нибудь помочь мне сделать это? [Дубликат]

Ваш код должен быть чем-то вроде этого

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query;
$result = mysql_query($query);

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

. После этого вы получите запрос, напечатанный на экране. Попробуйте выполнить этот запрос на своем сервере и посмотрите, дает ли он желаемые результаты. В большинстве случаев ошибка содержится в запросе. Остальная часть кода верна.

3
задан roxsap 7 November 2015 в 16:48
поделиться

4 ответа

Я думаю, что это самый простой и эффективный способ:

@echo off

echo %time%

(
    start call batch1.bat
    start call batch2.bat
    start call batch3.bat
    start call batch4.bat
) | set /P "="

echo %time%

В этом методе состояние ожидания в основном файле управляется событиями , поэтому оно не потребляет любое время процессора!

EDIT: Добавлены некоторые пояснения

Команда set /P прекратится, когда какая-либо из команд в ( block ) выведет линию , но команды start не показывают строку в этом cmd.exe . Таким образом, set /P продолжает ждать ввода до тех пор, пока не закончится все процессы, запущенные командами start. В этот момент линия трубопровода, связанная с ( block ), закрыта, поэтому set /P Stdin закрыт, а команда set /P заканчивается ОС.

8
ответ дан Aacini 26 August 2018 в 22:15
поделиться

Попробуйте.

@echo off
echo %time%
start "" /wait cmd /c bat1.bat |start "" /wait cmd /c bat2.bat |start "" /wait cmd /c bat3.bat
echo %time%

pause
3
ответ дан Squashman 26 August 2018 в 22:15
поделиться

дают уникальную строку заголовка новым процессам, а затем проверяют, запущены ли какие-либо процессы с этой строкой в ​​заголовке:

start "+++batch+++" batch1.bat
start "+++batch+++" batch2.bat
start "+++batch+++" batch3.bat
start "+++batch+++" batch4.bat
:loop
  timeout /t 1 >nul
  tasklist /fi "windowtitle eq +++batch+++*" |find "cmd.exe" >nul && goto :loop
echo all tasks finished

(find используется, потому что tasklist не вернуть полезный уровень ошибок)

3
ответ дан Stephan 26 August 2018 в 22:15
поделиться

У вас может быть batch1..batchn4 создавать файлы флагов, когда они закончатся.

, например echo y > flag1 в batch1.bat

Затем в главном командном файле проверьте наличие файлов флагов перед выходом. Вам понадобится какая-то утилита для сна, чтобы сделать что-то вроде этого в конце основного пакетного файла:

IF EXIST flag1 GOTO check2
sleep <for a short amount of time>
goto check1

:check2
IF EXIST flag2 GOTO check3
sleep <for a short amount of time>
goto check2

:check3
IF EXIST flag3 GOTO check4
sleep <for a short amount of time>
goto check3

:check4
IF EXIST flag4 GOTO xit
sleep <for a short amount of time>
goto check4

:xit

Недостатком этого метода является то, что ваше время будет немного от вас, потому что вы опрос для файлов флагов, а не ведение событий. Это может быть или не быть проблемой в вашей ситуации. Таким образом, пакетные файлы довольно ограничены. Возможно, вам лучше попытаться сделать это в PowerShell или на python или на каком-либо другом более умелом языке сценариев.

0
ответ дан JJF 26 August 2018 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: