0

I have a few questions in c++ batch files:

  1. I tried to do system("dir c:\ ") but it always just show the folder of the project, not the C:\ folder. why? how can i fix this?

  2. Some process in batch (like copy con) require control+c or control+z to stop them. How can I insert such a thing to the batch program from the C++ program?

4

2 回答 2

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

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

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

另一方面,如果您使用 C++ 编程,则不应该过多地依赖批处理:只需编写代码以直接在 C++ 中执行您需要的操作,并避免弄乱(可怕的)Windows 命令解释器。

于 2013-07-05T14:34:05.417 回答
0

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

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

无论如何,我不建议使用system(). 读这个

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

于 2013-07-05T14:30:51.910 回答