Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/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
Redirect DOS命令重定向到文件截断输出_Redirect_Buffer_Dos - Fatal编程技术网

Redirect DOS命令重定向到文件截断输出

Redirect DOS命令重定向到文件截断输出,redirect,buffer,dos,Redirect,Buffer,Dos,我有一个命令行工具,通常会转储大约200多行输出。我正在查找此输出末尾出现的文本。将输出重定向到文件时: C:\> somecommand > results.txt 2>&1 …此文件中仅显示前100行左右的输出。类似地,如果我将输出导入类似“findstr”的内容,接收程序将无法在大约第100行之后查找或操作任何文本 shell的屏幕缓冲区大小设置似乎对可以捕获的行数没有任何影响 你知道这是怎么回事吗?值得一提的是,所讨论的命令是InstallShield 201

我有一个命令行工具,通常会转储大约200多行输出。我正在查找此输出末尾出现的文本。将输出重定向到文件时:

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中使用。