关于C++的问题:用C++调用CMD且内容包含双引号的时候(已转义),老报错

折腾我半夜的问题,我吐了。
就是用C++调用CMD且内容包含双引号的时候(已转义),不知道是我的问题还是编译器的问题,老弹出来这个:

img


相关代码:

system("\"%USERPROFILE%\myshortcut.vbs\" /target:\"%USERPROFILE%\shutdown.bat\" /shortcut:\"%USERPROFILE%\Desktop\关机.lnk\"");

求解

路径也转义下

system("\"%USERPROFILE%\\myshortcut.vbs\" /target:\"%USERPROFILE%\\shutdown.bat\" /shortcut:\"%USERPROFILE%\\Desktop\\关机.lnk\"");
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7562710
  • 这篇博客也不错, 你可以看下C++ 获取CMD的输出结果
  • 除此之外, 这篇博客: C++恶搞代码中的 1.cmd弹窗(自行输入次数) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<iostream>
    #include<string.h>
    #include<stdio.h> 
    #include<windows.h>
    using namespace std;//使用标准名字空间
    int main(){
    	int a;
    	cin>>a;
        system("color F5");//将屏幕调至白色
        for(int i;i<=a;i++)
        {
           system("start"); 
        }
        return 0;//主函数结束,返回0
    }

    输入打开的弹窗数,按enter,瞬间弹窗满屏

    中途退出可右键代码运行程序选关闭,将会停止。

  • 以下回答来自chatgpt:

    这个问题是由于C++中双引号在字符串中有特殊意义,需要进行转义,所以在使用包含双引号的命令时会报错。解决这个问题的方法是使用反斜杠(\)对双引号进行转义。下面是修改后的代码:

    #include <iostream>
    #include <cstdlib>
    
    int main() {
        std::string cmd = "command_with_double_quotes";
        // 使用反斜杠对双引号进行转义
        std::string cmdWithQuotes = "\"" + cmd + "\"";
        std::system(cmdWithQuotes.c_str());
        return 0;
    }
    

    这样,在运行命令时,双引号将被正确地包含在命令字符串中,解决了报错的问题。请注意,这里的命令字符串需要使用两个双引号进行包裹,即在字符串前后各加一个双引号。

    如果还有其他问题,请随时告诉我。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^