c ++在后台运行system(),在dirpath中input空格,输出到文本文件

我试图用一堆选项运行tshark exe并输出到一个fil(见下文)。 不过,我真的坚持使用system()命令的正确语法。

我以前在这里有过帮助,甚至已经得到它与DOS for循环,但是这是超越我。 我已经尝试了各种各样的转义序列,并将所有命令封装在2-3个引号中,就像我在SO上看到的其他build议一样。

该命令是:

C:\Program Files\Wireshark\tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\test\output.csv 

我试过了:

 system("start C:\\Program\ Files\\Wireshark\\tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &"); system("\"start C:\\Program\ Files\\Wireshark\\tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info\" > c:\\test\\tshark2.csv &"); 

…在其他人中。

如果不是在这个目录中的空间,我可以通过这个想法。 更改为运行tshark的目录更容易吗? 另外,我现在的build议是在系统调用中使用“开始”,如果这是错误的,请随时说。

道歉的问题,但我最近才进入C + +,我仍然习惯了一些事情…

编辑

我应该补充说,我也试图让这个作为后台作业运行,并为我的脚本的其余部分继续运行时…

更新 – 解决scheme

到达与下面的答案相同的解决scheme。 根据在后台运行任务的原始要求,下面的命令可以让我做到这一点,并输出到一个文本文件:

 system("start \"\" cmd /c C:/\"Program Files\"/Wireshark/tshark.exe -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info ^> c:/test/output.csv"); 

大家的回答几乎是正确的。 尝试这个:

 system("\"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv"); 

在你的问题的最后有一个'&'。 这用于Linux和其他* nix系统在后台运行作业。 在Windows上,'&'是一个命令分隔符(允许你在同一行放置多个命令)。 要在后台运行,您需要使用start命令。 但是,如果启动命令的第一个参数用引号引起来,则start命令会将其视为窗口标题。 真正的命令然后成为第二个参数。 所以你应该在实际之前在引号中添加一个虚拟参数:

 system("start \"\" cmd /c \"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info ^> c:\\test\\tshark2.csv"); 

还要注意,重定向操作符>需要被转义为^>以便重定向tshark命令的输出而不是重定向start命令的输出。 >需要被cmd.exe解释,所以start的参数必须是cmd

只有当你想在后台运行的程序是一个控制台应用程序(即通常在命令提示符窗口中运行的程序)时才需要start命令。 如果它是一个正常的Windows应用程序,那么它将与启动它的应用程序同时运行,所以不需要使用start

 system("start \"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &"); 

正确的字符串是:

 "start \"\" \"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &" 

(根据这个Q / A ,你需要把空的引号字符串( "" )作为第一个参数。

或者,没有start命令:

 "\"C:\\Program Files\\Wireshark\\tshark.exe\" -a duration:130 -i 3 -T fields -e frame.number -e frame.time -e _ws.col.Info > c:\\test\\tshark2.csv &" 

你只能在" (在\ c ++ => \"转义)包含空格的路径,空格不是,不能也不需要转义。

系统函数调用不需要开始。 只要给系统(C:\ Program \ Files \ Wireshark \ tshark.exe …之后的参数);

只是这样做:

系统(“开始”\ C:\ Program \ Files \ Wireshark \ tshark.exe -a持续时间:130 -i 3 -T字段-e frame.number -e frame.time -e _ws.col.Info> c: \ test \ tshark2.csv \“&”);