我一直在尝试运行我构建的应用程序并将其输出到文件中。但是,我遇到了执行此操作所需的命令行参数的问题。
这是使用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到目录。
在你的命令中,>
重定向start
的输出而不是ipconfig
的输出。这就解释了为什么你什么都没看到 - start
根本就没有输出任何东西。
基于对问题的评论,您可以像ShellExecute
一样实现您的目标:
ShellExecute(
0,
"open",
"cmd.exe",
"/C ipconfig > output.txt",
NULL,
SW_HIDE
);
而不是使用start
我想你可能想用cd
来改变目录。
试试这个批处理文件:
cd "C:\Program Files\Tools\2012"
ip.exe >output.txt
或者在没有批处理和命令行的情况下使用:
"C:\Program Files\Tools\2012" ip.exe >output.txt"
虽然system32
在PATH
,所以我不确定你为什么要通过它的完整路径访问ipconfig exe,但这应该有效。
错误是这样的:
start /D "C:\>WINDOWS\system32" ipconfig.exe > output.txt
应该
start /D "C:\WINDOWS\system32" ipconfig.exe > output.txt
没有>
的路径。虽然在C:\>
的提示下显示cmd.exe
,但它并不是路径名称的一部分,据我所知,>
实际上是无效的。
另外我强烈建议你使用:
start /D "%SystemRoot%\system32" ipconfig.exe > output.txt
此外,因为开始创建一个新的控制台(和新的stderr
和stdout
)你正在捕捉start
的输出而不是ipconfig
。所以你可能想用:
pushd "%SystemRoot%\system32" & ipconfig.exe > output.txt & popd
但是这会尝试将output.txt
写入%SystemRoot%\system32
,并且在大多数系统上都会失败,除非你是管理员。所以给出一条绝对的道路,或者简单地说清楚一下:
ipconfig.exe > output.txt
ipconfig.exe
始终在默认系统PATH
变量中,因此它将起作用,除非管理员已“修复”系统,在这种情况下您仍然可以执行:
%SystemRoot%\system32\ipconfig.exe > output.txt