system 语法命令不正确

这里想用system来运行文件转移,但总显示 “命令语法不正确。” ,想问一下各位大能有没有解决方法

img

#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <fstream>
#include <windows.h>
#pragma comment(lib,"Advapi32.lib")
using namespace std;
int main()
{
    ofstream f;
    f.open("aaa.txt");
    f << "" << endl;
    f.close();
    string s = "", s1 = "", s2 = "";
    char strBuffer[256] ={0};
    DWORD dwSize = 256;
    GetUserName(strBuffer,&dwSize);
    for (int i = 0;strBuffer[i];i++)
    {
        if (strBuffer[i] == ' ')
        {
            s2 += '\\';
            s2 += strBuffer[i];
        }
        else
        {
            s2 += strBuffer[i];
        }
    }
    char buf[1000];
    GetCurrentDirectory(1000, buf);
    for (int i = 0;buf[i];i++)
    {
        if (buf[i] == '\\')
        {
            s1 += buf[i];
            s1 += '\\';
        }
        else
        {
            s1 += buf[i];
        }
    }
    s1 += "\\\\aaa.txt";
    s2 = "C:\\\\User\\\\" + s2 + "\\\\Desktop\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\\\\aaa1.bat";
    s = "move " + s1 + " "+ s2;
    const char *str = s.c_str();
    system(str);
    return 0;
}

思考过是否为用户名中带有空格,但在语句中加入转义字符后发现结果一样

感谢各位大能!

orz

\\\\换成\\

文件名前后加上引号

    s1 += "\\aaa.txt";
    s2 = "C:\\User\\" + s2 + "\\Desktop\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\aaa1.bat";
    s = "move \"" + s1 + "\" \""+ s2 + "\"";

我印象中你的freopen好像用法写错了

【以下回答由 GPT 生成】

问题分析: 使用system命令时显示"命令语法不正确"的问题很有可能是由于路径中的空格未正确转义所导致的。在给system命令传递路径参数时,如果路径中有空格,需要使用引号将路径包裹起来。根据提供的代码,可以看到在获取用户名和当前目录时,并没有对空格进行正确的处理。

解决方案: 1. 获取用户名时,对空格进行转义处理。 将: cpp if (strBuffer[i] == ' ') { s2 += '\\'; s2 += strBuffer[i]; } 改为: cpp if (strBuffer[i] == ' ') { s2 += "\\ "; } else { s2 += strBuffer[i]; }

  1. 获取当前目录时,对路径中的空格进行转义处理。 将: cpp if (buf[i] == '\\') { s1 += buf[i]; s1 += '\\'; } 改为: cpp if (buf[i] == ' ') { s1 += "\\ "; } else if (buf[i] == '\\') { s1 += buf[i]; s1 += '\\'; }

  2. 在拼接命令字符串时,将路径参数用引号包裹起来。 将: cpp s = "move " + s1 + " " + s2; 改为: cpp s = "move \"" + s1 + "\" \"" + s2 + "\"";

修改后的代码如下:

#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <fstream>
#include <windows.h>
#pragma comment(lib,"Advapi32.lib")
using namespace std;

int main()
{
    ofstream f;
    f.open("aaa.txt");
    f << "" << endl;
    f.close();
    string s = "", s1 = "", s2 = "";
    char strBuffer[256] ={0};
    DWORD dwSize = 256;
    GetUserName(strBuffer,&dwSize);
    for (int i = 0;strBuffer[i];i++)
    {
        if (strBuffer[i] == ' ')
        {
            s2 += "\\ ";
        }
        else
        {
            s2 += strBuffer[i];
        }
    }
    char buf[1000];
    GetCurrentDirectory(1000, buf);
    for (int i = 0;buf[i];i++)
    {
        if (buf[i] == ' ')
        {
            s1 += "\\ ";
        }
        else if (buf[i] == '\\')
        {
            s1 += buf[i];
            s1 += '\\';
        }
        else
        {
            s1 += buf[i];
        }
    }
    s1 += "\\\\aaa.txt";
    s2 = "C:\\User\\" + s2 + "\\\\Desktop\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs\\\\Startup\\\\aaa1.bat";
    s = "move \"" + s1 + "\" \"" + s2 + "\"";
    const char *str = s.c_str();
    system(str);
    return 0;
}

这样就能正确执行move命令并将文件移动到指定目录了。



【相关推荐】



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