【问题标题】:Batch files commands in C++C++ 中的批处理文件命令
【发布时间】:2013-07-05 14:25:21
【问题描述】:

我有几个关于 c++ 批处理文件的问题:

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

  2. 某些批处理(如复制操作)需要 control+c 或 control+z 来停止它们。如何从 C++ 程序中将这样的东西插入到批处理程序中?

【问题讨论】:

  • 如果您的代码中确实有system("dir c:\");,我希望编译器会拒绝它。如果没有,请准确发布您在代码中的内容...
  • 对于第二个问题,您到底想做什么?在 C++ 中使用字符串常量创建一个包含一些文本的文件会容易得多,只需将其写入文件,所以...

标签: c++ c batch-file system


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

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

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

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

【讨论】:

  • 谢谢!这是否意味着每次我使用反斜杠 \ 我都需要将其写为 \\ ?还有一件事:我怎样才能使批处理命令发送我的 C++ 程序信息?例如:我希望字符串时间变量包含 system(time /t) 的输出。我该怎么做?
  • @user2554080:你可以使用管道(例如使用上面提到的函数),但你应该避免这些东西,改用 C++ 函数!查找标题<ctime>
  • @user2554080:管道是与您启动的另一个程序进行通信的一种方式;你可以创建它,例如与popen。但你不需要这样:如果你想用 C++ 编写程序,就用 C++ 编写;如果你想写批处理,写一个批处理文件。但是,当您必须学习某些东西时,不要将 C++ 与批处理混合使用:相反,学习 C++ 的方式来做到这一点。
  • C++ 方式比批处理方式复杂得多.....C++ 方式是否适用于所有操作系统?
【解决方案2】:

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

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

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

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

【讨论】:

  • 前两段虽然正确,但与这种情况无关;此外,PostMessage 与控制台应用程序无关(并且在使用 system 时无论如何您都不能使用它,因为它没有为您提供任何可以使用的 HWND)。
  • 看起来使用 system() 函数是个坏主意。如果是这样,我如何从 C++ 程序中管理文件?或者如何执行批处理文件的所有其他功能?
  • @user2554080 在不使用 system() 调用的情况下,使用 c++ 可以实现相同的功能。很难说,您需要什么确切的信息,因为我不知道 manage 这个词在您的情况下意味着什么。你应该使用谷歌,然后你可以问另一个问题,以防万一你什么也没找到。
  • 我的命令有问题:dir "c:\program files" 我该如何给出这样的命令?
  • 我的命令有问题:dir "c:\program files" 我该如何给出这样的命令,或者一个文件夹\文件名带有空格的命令?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2020-09-10
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多