2013-03-20 76 views
3

如果我们有一个批处理文件被重定向到一个日志像这样:有没有办法检查批处理文件中的重定向?

C:\Testing\Example.bat > C:\Testing\Example.log

有什么办法里面的批处理文件,以确定是否有一个标准输出重定向发生在一个日志文件?

基本上我的批处理文件需要传递给它的三个参数。如果省略参数,批处理文件就会像常规DOS命令那样打印使用示例,并会抛出“暂停”,以便读取指令。但是,如果批处理被调用时没有参数并且它被记录下来,那么批处理文件将永远坐在那里等待一个键来暂停暂停,但不会在屏幕上显示任何内容。

通常这根本就不是问题,但是我试图做这个傻瓜证明,因为我不会是在其他脚本/计划任务中实现批处理文件的人。

在这一点上,似乎我需要彻底摆脱使用停顿,但我希望有一个解决方案,我不需要。谢谢您的帮助。

+0

而不是使用暂停,您可以使用超时选择命令。 – rojo 2013-03-20 21:16:37

+1

可以检测重定向,并且如果管道处于活动状态,[如何检测输入是来自管道还是重定向文件](http://www.dostips.com/forum/viewtopic.php?p=10672#p10672) 。但是你也可以阅读这个[Dostips:参数万无一失](http://www.dostips.com/forum/viewtopic.php?p=14612#p14612),流是如何工作的。 – jeb 2013-03-20 21:58:14

+0

Jeb感谢您将本文档链接起来,了解流媒体实际发生的情况确实很有趣。由于设置这些示例的复杂性,我觉得它会使批处理文件超过我所熟悉的水平。如果关键参数丢失,并且将指令标签链接到[%1] == [/?]或[%1] == [help] – 2013-03-22 12:53:13

回答

1

我不知道有任何方法只使用批处理和标准命令来做到这一点。但是,如果您的其他语言(如本机C或C#程序)可以使用其他语言,并且包含其他.exe文件以及.bat,则可以使用这些技巧。

+1

感谢您的Nate快速回复,我最终退出了批处理文件。足够聪明地,我宁愿完全用C#来完成这个工作,事实上批处理文件中的大部分实际工作都来自我放在一起的exe文件。然而项目管理员却因为想要一些可以轻松修改而不需要重新编译的事情而哭了起来。我在这个概念上,所以我的下一站实际上是PowerShell,它也被击落了,因为“我们不知道它是什么或如何使用它”。我今天似乎无法赢得一场比赛......也许如果我真的为之奋斗,他们会让我去参加Powershell,但现在我被困在老的DOS中。 – 2013-03-20 21:03:53

0

没有在标准的Windows批处理文件的方式(即我所知道的),以确定标准输出重定向,或者即使被重定向。但是,您可能希望将您的使用示例写入STDERR而不是STDOUT,因此至少将一个简单的重定向导入到文件中将不会捕获使用情况信息。

例TEST.CMD:

@ECHO OFF 

ECHO Test output 1>&2 
PAUSE 1>&2 

然后调用它:

test.cmd > output.log 

这仍将输出:

Test output 
Press any key to continue . . . 

当然,这并没有为文件的时候用STDERR调用被重定向。

test.cmd 2> error.log 
相关问题