2013-11-02 22 views
0

У меня есть два пакетных файлов следующим образом, в котором file2.bat зависит от file1.bat «s выход:Файлы, не дожидаясь друг друга

file1.bat

@ECHO OFF 
setlocal enabledelayedexpansion 
SET "keystring1=" 
(
FOR /f "delims=" %%a IN (
Source.txt 
) DO (
ECHO %%a|FIND "Appprocess.exe" >NUL 
IF NOT ERRORLEVEL 1 SET keystring1=%%a 
FOR %%b IN (App1 App2 App3 App4 App5 App6) DO (
ECHO %%a|FIND "%%b" >NUL 
IF NOT ERRORLEVEL 1 IF DEFINED keystring1 CALL ECHO(%%keystring1%% %%b&SET "keystring1=" 

)))>result.txt 

GOTO :EOF 

file2.bat

@echo off 
setlocal enabledelayedexpansion 

(for /f "tokens=1,2" %%a in (memory.txt) do (
for /f "tokens=5" %%c in ('find " %%a " ^< result.txt ') do echo %%c %%b 
))> new.txt 

file1.bat обычно занимает 60 секунд, чтобы завершить его выполнение.

В master.bat файл я звоню выше двух файлов, как:

call file1.bat 
call file2.bat 

но file2.bat не ждет file1.bat завершить выполнение.

Даже, я пытался позвонить file2.bat в file1.bat, как показано ниже, но до сих пор его не ждет file1.bat получить завершен:

@ECHO OFF 
setlocal enabledelayedexpansion 
SET "keystring1=" 
(
FOR /f "delims=" %%a IN (
    Source.txt 
) DO (
    ECHO %%a|FIND "HsvDataSource.exe" >NUL 
    IF NOT ERRORLEVEL 1 SET keystring1=%%a 
    FOR %%b IN (EUHFMPROD USHFMPROD TL2TEST GSHFMPROD TL2PROD GSARCH1213 TL2FY13) DO (
    ECHO %%a|FIND "%%b" >NUL 
    IF NOT ERRORLEVEL 1 IF DEFINED keystring1 CALL ECHO(%%keystring1%% %%b&SET "keystring1=" 

)))>file2.txt 

GOTO :EOF 

call file1.bat 

Я также попытался ниже начать вариант, но никакого эффекта .:

start file1.bat /wait 
call file2.bat 

Не получая ..why его происходит ..?

+3

Как я разместил в своем комментарии ниже, с файлами, которые вы отправили, ** невозможно ** для 'file2.bat' запускать до' file1.bat' завершено. Ergo, вы неправильно истолковываете проблему, или вы не размещали реальные пакетные файлы. В 'file1.bat' нет команд, которые многопоточны. – foxidrive

+0

Просто сутулясь. Если ваш реальный код - это то, что вы опубликовали, проблема может быть путем к файлам. В любом месте нет указателя пути. Когда вы запускаете пакетные файлы по расписанию, текущий каталог, возможно, не является каталогом файлов партии, а «возможно» пакетные файлы или файлы данных не найдены, потому что они создаются в другом месте? –

+0

@ foxidrive..got error..actually source.txt (вход для file1.bat) обновлялся, а file1.bat начал называть его. Я добавил задержку ~ 20sec ** ping ** между созданием source.txt и file1.bat, называя это..и таким образом он разрешил проблему полностью .. спасибо u foxi .. !! :) – Sunny

ответ

3

Поведение, которое вы видите, вероятно, не совсем так, как вы его описываете.

Запустите это, когда вы увидите приглашение на паузу, затем осмотрите result.txt, чтобы увидеть, что внутри него.

Если содержимое result.txt верное, нажмите клавишу и разрешите запуск файла file2.bat. Посмотрите, работает ли он правильно.

Если это не удается, то захват сообщения об ошибках на консоли и скажите нам, что в result.txt и new.txt

call file1.bat 
pause 
call file2.bat 
pause 
+0

@ Foxidrive..вверху .. работает правильно, но после удаления ** пауза ** между файлами вызывает..и не работает..болееводный FYI..in ** master.bat ** у меня есть общий 9 пакетных файлов для вызова Foxi .. все работают правильно. Но этот файл1.bat, который показывает максимальное время ... уничтожает все ... потому что другие файлы зависят от его вывода. – Sunny

+0

и еще один момент - запустить ** master.bat ** в невидимом/скрытом режиме. Я использую ниже VB Script: 'Установить WshShell = CreateObject ("WScript.Shell") WshShell.Run chr (34) & «C: \ master.bat» & Chr (34), 0 Set WshShell = Nothing ' – Sunny

+1

С файлами, которые вы отправили, ** невозможно ** для 'file2.bat' для запуска до' file1.bat' завершено. Ergo, вы неправильно истолковываете проблему, или вы не размещали реальные пакетные файлы. – foxidrive

3

Я не могу подтвердить свои наблюдения. Пожалуйста, смотрите на экран сессии:

enter image description here

+0

@ Endoro..in ** master.bat ** У меня есть всего 9 пакетных файлов, использующих вызов, зависящий от вывода одного другого. все работают правильно. но этот файл1.bat, который скажет максимальное время ... уничтожает все ... потому что другие файлы зависят от его выхода. И еще один момент - запустить master.bat в невидимом/скрытом режиме. Я использую ниже VB Script: 'Установить WshShell = CreateObject ("WScript.Shell") WshShell.Run chr (34) & "C: \ master.bat" & Chr (34), 0 Установить WshShell = Nothing' – Sunny

+0

@ Заключенный не делает, t зависит от количества вызовов, но только от их последовательности. – Endoro

+0

@ Endoro..m исчерпал, почему он не работает для меня .. :(.. есть ли способ добавить 70 секунд времени ожидания между file1.bat и file2.bat ..? – Sunny

1

Простите. Откуда вы знаете, что проблема у вас есть, что вы думаете? Это очень простой способ проверить его.Вставьте следующую строку в master.bat перед вызовом file1.bat:

echo "master.bat" started at %time% > logfile.txt 

и вставить следующую строку в начале каждого из девяти Пакетных файлов:

echo "%~NX0" started at %time% >> logfile.txt 

EDIT: И вставьте следующую строку конец каждого из девяти пакетных файлов:

echo "%~NX0" ended at %time% >> logfile.txt 

Затем запустите свою программу a nd опубликуйте содержимое logfile.txt, пожалуйста ...

+0

@ Aacini..yes..it работал для меня..активно ** source.txt ** вызывал все проблемы. Теперь его плавно бегало..баты ..! :) – Sunny

Смежные вопросы