Batch file 不等待对方的文件

Batch file 不等待对方的文件,batch-file,batch-processing,Batch File,Batch Processing,我有两个批处理文件,如下所示,file2.bat依赖于file1.bat的输出: 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 (Ap

我有两个批处理文件,如下所示,file2.bat依赖于file1.bat的输出:

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
@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 
file2.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
@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 
但是file2.bat没有等待file1.bat完成它的执行

甚至,我试图在file1.bat中调用file2.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

不明白……为什么会这样?

你看到的行为可能与你描述的不完全一样

运行此命令,当您看到暂停提示时,检查
result.txt
以查看其中的内容

如果
result.txt
的内容正确,则点击一个键并允许file2.bat运行。看看它是否运行正常

如果失败,则捕获控制台上的错误消息,并告诉我们
result.txt
new.txt

call file1.bat
pause
call file2.bat
pause

我不能证实你的观察。请查看会话屏幕:


对不起。你怎么知道你的问题是你怎么想的?有一个非常简单的方法来测试它。在调用
file1.bat
之前,在
master.bat
中插入以下行:

echo "master.bat" started at %time% > logfile.txt
并在九个批处理文件的每个文件的开头插入以下行:

echo "%~NX0" started at %time% >> logfile.txt
echo "%~NX0" ended at %time% >> logfile.txt
编辑:并在九个批处理文件中的每一个文件的末尾插入以下行:

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

然后运行您的程序并发布
logfile.txt
please…

@Foxidrive..的内容。按上述方式..其工作正常,但是在删除文件之间的暂停后,调用..它不工作..而且仅供参考..在master.bat中,我总共有9个批处理文件要调用Foxi..所有文件都工作正常。但是这个文件1.bat占用了最长的时间..正在销毁所有..因为其他文件依赖于它的输出。&另一点是在不可见/隐藏模式下运行master.bat..我正在使用在VB脚本下面:“Set WshShell=CreateObject(“WScript.Shell”)WshShell.Run chr(34)和“C:\master.bat”&chr(34),0 Set WshShell=Nothing”对于您发布的文件,在
file1.bat
完成之前不可能运行
file2.bat
。因此,您误解了问题,或者您没有发布真正的批处理文件。@endro..在master.bat中,我总共有9个批处理文件使用依赖于一个-另一个输出的调用。所有文件都正常工作。但是这个文件1.bat记录了最长时间。正在销毁所有文件。因为其他文件依赖于其输出。&另一点是在不可见/隐藏模式下运行master.bat。。我使用下面的VB脚本:'Set WshShell=CreateObject(“WScript.Shell”)WshShell.run chr(34)&'C:\master.bat“&chr(34),0 Set WshShell=Nothing'@Sunny它不取决于调用的数量,而只取决于调用的顺序。@endro..m对于为什么它对我不起作用,我已经筋疲力尽了..:(…有没有办法在file1.bat和file2.bat之间增加70秒的等待时间?@Sunny是:
ping-n 71 localhost>nul
timeout/t 70
@endro..我使用ping delay方法在source.txt创建和file1.bat调用之间插入延迟..因为source.txt(file1.bat的输入)当file1.bat开始调用它时正在更新..谢谢您的帮助..!!:)正如我在下面的评论中所发布的,对于您发布的文件,
file2.bat
file1.bat
完成之前是不可能运行的。因此,您误解了问题,或者您没有发布真正的批处理文件。上面的
file1.bat
中没有多线程的命令。如果您r实际代码是您发布的,问题可能是文件的路径。任何地方都没有路径指示。当您运行计划的批处理文件时,当前目录可能不是批处理文件的目录,“可能”找不到批处理文件或数据文件,因为它们是在另一个位置生成的?@foxidrive..出现错误..actual source.txt(file1.bat的输入)当file1.bat开始调用它时正在更新..我在source.txt创建和file1.bat调用之间添加了~20sec ping延迟..因此它完全解决了问题..谢谢你foxi..!!:)@Aacini..是的..它对我有效..实际上source.txt导致了所有问题..现在它运行顺利..谢谢..!)