C# Perforce命令行:如何在";中使用-i标志;p4客户机-i“吗;?

C# Perforce命令行:如何在";中使用-i标志;p4客户机-i“吗;?,c#,command-line,client,perforce,workspace,C#,Command Line,Client,Perforce,Workspace,我想在命令行上编辑/创建一个工作区,而不弹出任何文本编辑器。文档说使用-i标志来使用标准输入。这种用法的语法/格式是什么 传递文件可以正常工作: p4客户端-i

我想在命令行上编辑/创建一个工作区,而不弹出任何文本编辑器。文档说使用-i标志来使用标准输入。这种用法的语法/格式是什么

传递文件可以正常工作: p4客户端-i 传递定义工作区的实际字符串无效: p4 client-i“Root:C:\The\Root\r\n选项:noallwrite noclobber…”

有什么想法吗?
谢谢

仅输入这样的字符串不会在标准输入中传递它。您需要引导一些输入,就像第一个传递文件的示例一样

如果确实需要将字符串作为命令行的一部分,则需要使用类似于echo的方法来导入适当的文本。但是echo不支持换行符,因此您需要分别回显每一行:

(回显线路1和回显线路2和回显线路3)| p4客户-i

很快就会变得很难看

由于您似乎真的很想知道如何从c#中执行此操作,下面是一个启动命令行进程并为其提供输入的非常粗略和现成的示例:

        ProcessStartInfo s_info = new ProcessStartInfo(@"sort.exe");
        s_info.RedirectStandardInput = true;
        s_info.RedirectStandardOutput = true;
        s_info.UseShellExecute = false;
        Process proc = new Process();
        proc.StartInfo = s_info;
        proc.Start();
        proc.StandardInput.WriteLine("123");
        proc.StandardInput.WriteLine("abc");
        proc.StandardInput.WriteLine("456");
        proc.StandardInput.Close();
        String output = proc.StandardOutput.ReadToEnd();
        System.Console.Write(output);

在我处理完我的案例中的问题后,解决方案如下所示:

P4Process.StartInfo.Arguments="client -i"
StreamWriter myStreamWriter = P4Process.StandardInput;
                String inputText = File.ReadAllText(@"C:\Program Files\Perforce\clientSpec.txt");
                myStreamWriter.Write(inputText);
                P4Process.StandardInput.Close();                  

                P4Process.BeginOutputReadLine();
                P4Process.BeginErrorReadLine();

                P4Process.WaitForExit();
对我来说,这与:

p4 client - i < clientSpec.txt
p4客户端-i
您可以使用here文档。Bash还有
谢谢你的回答。我的最终目标是在c#中实现这一点,方法是在字符串中创建工作区详细信息,并将其传递给要运行的过程。我可以暂时将文件写入磁盘,然后像上面那样使用该文件(p4 client-I