我在c ++批处理文件中有几个问题:
我尝试做系统(“dir c:\”),但它总是只显示项目的文件夹,而不是C:\文件夹。 为什么?我该如何解决这个问题?
批处理中的某些进程(如copy con)需要control + c或control + z来阻止它们。如何从C ++程序中将这样的东西插入批处理程序?
答案 0 :(得分:2)
C字符串中的反斜杠(\
)字符用作转义字符,以便在C字符串中插入不可打印或其他“奇怪”字符 - 您可能已经看过例如换行符\n
。因此,要在字符串中插入文字反斜杠,必须编写\\
(否则编译器可能会将其误认为是转义序列)。
在您的特定情况下,编译器会看到转义序列\
,它没有被定义为转义序列,但许多编译器只是忽略反斜杠处理未定义的转义序列;因此,批处理解释器实际看到的是dir c:
。现在,DOS惯例是,如果您只是写下后跟冒号的驱动器号,而没有任何尾部反斜杠,那么您指的是该驱动器上的当前目录;因此你看到的行为。要解决这个问题,请写下
system("dir c:\\");
虽然您可以使用_popen函数(POSIX popen
的克隆)获得类似的功能,但没有标准功能。
另一方面,如果您使用C ++进行编程,则不应该依赖批处理:只需编写代码即可直接在C ++中执行操作,并避免弄乱(可怕的)Windows命令解释程序。 / p>
答案 1 :(得分:0)
如果使用system("command")
,则只执行一个命令,如果尝试执行system("command2")
,则执行条件与执行第一个命令相同。
如果您想调用某些命令,则需要对所有命令使用一个system()
调用。几年前我试过这个,但这不是一个好主意。您可以创建mybat.bat
文件并使用system("mybat.bat")
无论如何,我不建议使用system()
。 Read this
关于你问题的第二部分。可能是,您需要PostMessage
,但我不确定......这仅适用于Windows。