Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Batch file 批重定向start命令,但不重定向进程_Batch File_Output Redirect - Fatal编程技术网

Batch file 批重定向start命令,但不重定向进程

Batch file 批重定向start命令,但不重定向进程,batch-file,output-redirect,Batch File,Output Redirect,我需要将start命令的输出重定向到log.txt文件(例如,在路径错误的情况下),但不重定向它启动的进程。因为如果process.exe运行时间较长,则无法将下一个输出写入日志文件,因为它已被进程锁定 start "" "path\to the\process.exe" >> log.txt 2>&1 echo next output >> log.txt 一种选择: @set _FILE_NOT_FOUND=2 @set _fileToRun=path

我需要将start命令的输出重定向到log.txt文件(例如,在路径错误的情况下),但不重定向它启动的进程。因为如果process.exe运行时间较长,则无法将下一个输出写入日志文件,因为它已被进程锁定

start "" "path\to the\process.exe" >> log.txt 2>&1
echo next output >> log.txt
一种选择:

@set _FILE_NOT_FOUND=2
@set _fileToRun=path\to the\process.exe
@if not exist "%_fileToRun%" @echo File to run does not exist: %_fileToRun% >> log.txt & @exit /b -%_FILE_NOT_FOUND%
@start "" "%_fileToRun%"
@if %ERRORLEVEL% neq 0 @echo Start failed with: %ERRORLEVEL%
@echo next output >> log.txt

您是否尝试过自己发布的START命令行?除了显示的GUI错误消息提示之外,它还将START输出的错误消息写入文件
log.txt
。在当前命令过程中,有必要使用
^
将每个重定向操作符
>
&
转义为不被解释为命令开始输出的重定向。当然,我已经尝试过了。出现错误时,会成功地将其重定向到log.txt。但当它找到进程并运行它时,进程的输出也会被重定向,这是我不想要的。当我尝试按照您告诉我的那样调整行时(开始“”path\到\process.exe“^>^>log.txt 2^>^&1),进程不会被重定向(这很好),但错误消息也不会重定向到日志文件。我遗漏了什么吗?我无法重现你的问题。启动的过程不会阻止我手中的下一个回声。此外,启动的进程不会写入日志。请提供有关您的流程的更多信息,并确保告诉我们您使用的所有启动参数。如果可能的话,您应该给我们您正在使用的确切起始行。谈到这一行:start“”“path\到\process.exe”^>^>log.txt 2^>^&1我想要实现的是,当进程的路径写错了或者仅仅是process.exe不存在时,将输出错误消息重定向到log.txt文件。因为现在,它将错误消息写入控制台窗口。尽管您的答案有效,但我有两条改进建议。1.在所有操作系统上,强烈建议不要以负数退出应用程序或脚本。这是可能的,但成功时使用0,错误时使用正数。因此,请将第二行的末尾更改为
退出/b1
。2.避免在%ERRORLEVEL%NEQ 0时使用
,因为这只在命令块之外起作用。更好的方法是使用
if errorlevel 1
,它可以在批处理文件中的任何位置工作,意味着
start
的退出代码是否大于或等于1,即启动可执行文件时是否出错。请在命令提示窗口中运行
if/?
,以获取有关
if errorlevel X
语法的详细信息。相反的是
if not errorlevel 1
,这意味着如果退出代码小于1,即如果应用程序/脚本没有以负值退出,则等于0,这对于除此之外我见过的所有应用程序和脚本都是真的。有关启动命令的退出代码,请参阅。@Mofi,谢谢您的提示。我忘了查找正确的错误消息-1是我的“自我笔记”。。。。我从来没有把if语句放在命令块中。我避免将多行代码块放在一起,应该不惜一切代价避免它们。顺便说一句,许多程序返回负数表示错误,返回零或正数表示成功。您永远不应该假设脚本为失败返回正值。Windows批处理脚本语言很弱,并且充满了bug。在命令if的帮助下,可以清楚地解释
if errorlevel 1
的含义。在编程世界中,函数/命令的文档总是很重要的,而不是用户对函数/命令的理解。我真的很想知道哪些程序返回负数。在使用计算机的25年中,我从未见过一台。Microsoft for Windows和Linux内核文档中明确指出,应用程序不应使用负数。最好只使用范围为0到255(无符号字符值范围)或0到65535(无符号短值范围)的值。