C ++中的批处理文件命令

时间:2013-07-05 14:25:22

标签: c++ c batch-file system

我在c ++批处理文件中有几个问题:

  1. 我尝试做系统(“dir c:\”),但它总是只显示项目的文件夹,而不是C:\文件夹。 为什么?我该如何解决这个问题?

  2. 批处理中的某些进程(如copy con)需要control + c或control + z来阻止它们。如何从C ++程序中将这样的东西插入批处理程序?

2 个答案:

答案 0 :(得分:2)

  1. C字符串中的反斜杠(\)字符用作转义字符,以便在C字符串中插入不可打印或其他“奇怪”字符 - 您可能已经看过例如换行符\n。因此,要在字符串中插入文字反斜杠,必须编写\\(否则编译器可能会将其误认为是转义序列)。

    在您的特定情况下,编译器会看到转义序列\,它没有被定义为转义序列,但许多编译器只是忽略反斜杠处理未定义的转义序列;因此,批处理解释器实际看到的是dir c:。现在,DOS惯例是,如果您只是写下后跟冒号的驱动器号,而没有任何尾部反斜杠,那么您指的是该驱动器上的当前目录;因此你看到的行为。要解决这个问题,请写下

    system("dir c:\\");
    
  2. 虽然您可以使用_popen函数(POSIX popen的克隆)获得类似的功能,但没有标准功能。

  3. 另一方面,如果您使用C ++进行编程,则不应该依赖批处理:只需编写代码即可直接在C ++中执行操作,并避免弄乱(可怕的)Windows命令解释程序。 / p>

答案 1 :(得分:0)

如果使用system("command"),则只执行一个命令,如果尝试执行system("command2"),则执行条件与执行第一个命令相同。

如果您想调用某些命令,则需要对所有命令使用一个system()调用。几年前我试过这个,但这不是一个好主意。您可以创建mybat.bat文件并使用system("mybat.bat")

执行该文件

无论如何,我不建议使用system()Read this

关于你问题的第二部分。可能是,您需要PostMessage,但我不确定......这仅适用于Windows。