Redirect DOS命令重定向到文件截断输出
我有一个命令行工具,通常会转储大约200多行输出。我正在查找此输出末尾出现的文本。将输出重定向到文件时:Redirect DOS命令重定向到文件截断输出,redirect,buffer,dos,Redirect,Buffer,Dos,我有一个命令行工具,通常会转储大约200多行输出。我正在查找此输出末尾出现的文本。将输出重定向到文件时: C:\> somecommand > results.txt 2>&1 …此文件中仅显示前100行左右的输出。类似地,如果我将输出导入类似“findstr”的内容,接收程序将无法在大约第100行之后查找或操作任何文本 shell的屏幕缓冲区大小设置似乎对可以捕获的行数没有任何影响 你知道这是怎么回事吗?值得一提的是,所讨论的命令是InstallShield 201
C:\> somecommand > results.txt 2>&1
…此文件中仅显示前100行左右的输出。类似地,如果我将输出导入类似“findstr”的内容,接收程序将无法在大约第100行之后查找或操作任何文本
shell的屏幕缓冲区大小设置似乎对可以捕获的行数没有任何影响
你知道这是怎么回事吗?值得一提的是,所讨论的命令是InstallShield 2012中的iscmdbld.exe
我尝试过的其他命令(如“dir”)不会出现此问题
只有在cmd窗口中运行命令时才能查看程序的完整输出。另一个策略是追加('>>'),而不是重新开始('>')。但是,我无法思考如何在不了解您的问题的情况下生成您所看到的内容。如果它正在写入另一个流,请尝试以下操作:
somecommand > results.txt 2>&1 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 9>&1
另一种可能是,该工具对部分输出使用直接屏幕写入-在MSDOS时代,有一些屏幕读取TSR程序可能会有所帮助。很遗憾,我没有安装InstallShield,因此我很难运行一些测试,但在处理输入和输出时,我有一些程序并没有像它们应该做的那样运行。在正常情况下“>”应该没有限制,我在后台运行ghostscript和其他旧dos程序的windows服务器上经常使用它,将输出传输到文件的唯一方法是使用>,有时我有相当多Mb的文件,因此200行确实与当前的exe有关 我只能建议您尝试一些解决方法,例如您可以尝试tee32,它是一个小型免费软件,可以将所有dos屏幕输出捕获到一个文件中。因此,您将在屏幕上看到输出,并将其保存在文件中 您可以阅读更多信息:不幸的是,页面上提到的链接不起作用,但我找到了一份有效的副本: 我真的希望这能帮助你克服这个问题
Emil解决问题的另一种方法可能是构建一个C#程序,捕获输出并将其发送到文件
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CaptureCMDOutput
{
class Program
{
static string _Filename = @"sc.exe";
static string _Arguments = @"query";
static string _outputfile = @"c:\debug.txt";
static void Main(string[] args)
{
var processStartInfo = new ProcessStartInfo
{
FileName = _Filename, // Exe file to run
Arguments = _Arguments, // Arguments to exe file
RedirectStandardOutput = true,
UseShellExecute = false
};
var process = Process.Start(processStartInfo);
process.OutputDataReceived += process_OutputDataReceived;
process.BeginOutputReadLine();
process.WaitForExit();
process.CancelOutputRead();
Console.ReadKey();
}
static void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
using (StreamWriter writer = new StreamWriter(_outputfile, true))
{
writer.WriteLine(e.Data);
}
}
}
}
尝试在开始时重定向,只要命令将其作为参数-<代码> >结果。TXT 2 >和1个SOMCOMMUDE<代码>尝试添加输出:C::\SOMeCOMMAMand>RESULTS。TXT 2>1I与我自己的Visual C++项目有相同的程序。当重定向到file.program(首次出现)->Problem我的程序的输出被截断。我的截断输出是一个google测试输出,其中我有50多个测试主题,总共有200多个测试函数。无法生成一个小的复制程序。原始效果在原始情况下已就位。在问题的评论中为我的案例添加更多信息。问题非常棘手。我的节目以一种病态但似乎很好的方式结束了。重定向控制台没有任何错误(Win 7 64位)。但我非常喜欢这个答案,因为它让位于调试这样的问题。谢谢。我在8-10岁的时候开始使用MS-DOS 5.0和Windows 3.0的计算机,不知怎么的,DOS和所有的小的解决方法,这些限制(比如640kb的RAM)仍然可能是我最喜欢的主题,它有它自己的魔力,我仍然认为DOS有一些有趣的感觉,你永远不会在LINUX和任何漂亮的Windows中使用。