Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 将多个bat文件的输出重定向到一个控制台窗口_Windows_Powershell_Batch File_Cmd - Fatal编程技术网

Windows 将多个bat文件的输出重定向到一个控制台窗口

Windows 将多个bat文件的输出重定向到一个控制台窗口,windows,powershell,batch-file,cmd,Windows,Powershell,Batch File,Cmd,出于开发目的,我在本地运行多个微服务。目前,我正在通过一个.bat脚本来完成这项工作,在这个脚本中,我正在调用其他.bat文件,这些文件正在启动我的服务。它启动多个控制台窗口,在输出之间导航并不方便 现在启动服务的脚本如下所示: start cmd /k call api_one.bat start cmd /k call api_two.bat ... 在api_xxx.bat中,我用我的api启动iisexpress 我正在寻找一种让它更舒适的方法。例如,通过将所有输出重定向到单个输出,例

出于开发目的,我在本地运行多个微服务。目前,我正在通过一个.bat脚本来完成这项工作,在这个脚本中,我正在调用其他.bat文件,这些文件正在启动我的服务。它启动多个控制台窗口,在输出之间导航并不方便

现在启动服务的脚本如下所示:

start cmd /k call api_one.bat
start cmd /k call api_two.bat
...
在api_xxx.bat中,我用我的api启动iisexpress


我正在寻找一种让它更舒适的方法。例如,通过将所有输出重定向到单个输出,例如使用前缀来标识脚本输出行的来源。

我遇到了类似的问题,我从启动另一个批处理文件的批处理文件调用批处理文件。。很难解释,但让我给你一些帮助我的代码:

test.bat中的内容:

set logname=.\log.log

if exist %logname% ( type nul > %logname% 
)

echo Now starting example.bat>>%logname%

call C:\example.bat >>%logname%

echo finished example.bat>>%logname%
下面是example.bat的内容:

echo starting integrated commands

start /b cmd /k "C:\example2.bat"

[some code to check for a process that starts in example2.bat] 

echo finished integrated commands
example2.bat的内容可以是您想要的任何内容,并且也显示在日志文件中


请注意,我的example2.bat在末尾有一个出口,因为example.bat检查example2.bat是否正在运行。只有当它完成时,它才能继续脚本。对我自己来说,我把所有3个脚本都放到了一个日志文件中。

我遇到了一个类似的问题,我从一个批处理文件调用了一个批处理文件,该批处理文件启动了另一个批处理文件。。很难解释,但让我给你一些帮助我的代码:

test.bat中的内容:

set logname=.\log.log

if exist %logname% ( type nul > %logname% 
)

echo Now starting example.bat>>%logname%

call C:\example.bat >>%logname%

echo finished example.bat>>%logname%
下面是example.bat的内容:

echo starting integrated commands

start /b cmd /k "C:\example2.bat"

[some code to check for a process that starts in example2.bat] 

echo finished integrated commands
example2.bat的内容可以是您想要的任何内容,并且也显示在日志文件中


请注意,我的example2.bat在末尾有一个出口,因为example.bat检查example2.bat是否正在运行。只有当它完成时,它才能继续脚本。对于我自己来说,我把所有的3个脚本都放到了一个日志文件中。

你是否尝试过使用>>重定向文件中的输出?e、 g.:start cmd/k call api_one.bat>>“C:\output.txt”我考虑过,使用powershell
Get Content output.txt-Wait
,但这不会给我一个前缀来标识行源。你可以在两个命令之间的文件中添加分隔符测试,如“-------”。啊,可能我不清楚。我的服务正在同时运行。操作系统的I/O系统中没有任何东西会神奇地使用进程标识符或标记作为写操作的前缀。您需要一个脚本来打开一个子进程,将stdout和stderr重定向到管道,并使用给定的前缀将输出行写入控制台。您可以在批处理脚本中使用
for/f
循环执行此操作。可以通过
启动/B
同时启动多个批处理脚本,而无需打开新的控制台,但如果脚本需要从控制台读取输入,则不要这样做;实际上,在这种情况下,最好将stdin重定向到NUL。并且不要使用
cmd/k
来运行脚本。这将是一个混乱。您是否尝试使用>>重定向文件中的输出?e、 g.:start cmd/k call api_one.bat>>“C:\output.txt”我考虑过,使用powershell
Get Content output.txt-Wait
,但这不会给我一个前缀来标识行源。你可以在两个命令之间的文件中添加分隔符测试,如“-------”。啊,可能我不清楚。我的服务正在同时运行。操作系统的I/O系统中没有任何东西会神奇地使用进程标识符或标记作为写操作的前缀。您需要一个脚本来打开一个子进程,将stdout和stderr重定向到管道,并使用给定的前缀将输出行写入控制台。您可以在批处理脚本中使用
for/f
循环执行此操作。可以通过
启动/B
同时启动多个批处理脚本,而无需打开新的控制台,但如果脚本需要从控制台读取输入,则不要这样做;实际上,在这种情况下,最好将stdin重定向到NUL。并且不要使用
cmd/k
来运行脚本。那将是一片混乱。