我一直在尝试运行我构建的应用程序并将其输出到文件中。但是,我遇到了执行此操作所需的命令行参数的问题。
这是使用ipconfig
我的问题的一个例子。
以下命令有效:
ipconfig > output.txt
虽然这将创建文件,但不会使用ipconfig
输出填充它:
start /D "C:\>WINDOWS\system32" ipconfig.exe > output.txt
我认为导致此问题的是使用start
,但我不确定。
解
这是为我解决问题的代码:
char path[500]; // Create character array
strcpy (path, "cd "); // Copy 'cd' into the array
strcat (path, toolLocation); // Copy the path of the tool into the array
strcat (path, " & ip.exe > output.txt"); // Append on the name of the exe and output to a file
system (path); // Run the built array
我正在创建一个字符数组然后追加它。这里的重要位是系统调用中使用的&
。在执行.exe文件之前,这是作为and
并首先执行cd到目录。
答案 0 :(得分:1)
在您的命令中,>
正在重定向start
的输出,而不是ipconfig
的输出。这就解释了为什么你什么也看不到 - start
根本就没有输出任何东西。
根据对问题的评论,您可以使用ShellExecute
来实现目标:
ShellExecute(
0,
"open",
"cmd.exe",
"/C ipconfig > output.txt",
NULL,
SW_HIDE
);
答案 1 :(得分:0)
我认为你可能不想使用start
来改变目录。
试试这个批处理文件:
cd
或者在没有批处理和命令行的情况下使用:
cd "C:\Program Files\Tools\2012"
ip.exe >output.txt
虽然"C:\Program Files\Tools\2012" ip.exe >output.txt"
位于system32
,所以我不确定你为什么要通过它的完整路径访问ipconfig exe,但这应该可行。
答案 2 :(得分:0)
错误是这样的:
start /D "C:\>WINDOWS\system32" ipconfig.exe > output.txt
应该是
start /D "C:\WINDOWS\system32" ipconfig.exe > output.txt
路径中没有>
。虽然在C:\>
的提示符处显示cmd.exe
,但不是路径名的一部分,据我所知,>
实际上无效。< / p>
此外,我强烈建议您使用:
start /D "%SystemRoot%\system32" ipconfig.exe > output.txt
此外,因为start会创建一个新的控制台(以及新的stderr
和stdout
),您正在捕获start
而不是ipconfig
的输出。所以你可能想用:
pushd "%SystemRoot%\system32" & ipconfig.exe > output.txt & popd
但是这会尝试将output.txt
写入%SystemRoot%\system32
并在大多数系统上失败,除非您是管理员。所以给出一条绝对的道路或者简单地忽略这一点:
ipconfig.exe > output.txt
ipconfig.exe
始终位于默认系统PATH
变量中,因此除非管理员已“修复”系统,否则它仍然有效,在这种情况下您仍然可以执行此操作:< / p>
%SystemRoot%\system32\ipconfig.exe > output.txt