这里想用system来运行文件转移,但总显示 “命令语法不正确。” ,想问一下各位大能有没有解决方法
#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;
}
思考过是否为用户名中带有空格,但在语句中加入转义字符后发现结果一样
\\\\换成\\
文件名前后加上引号
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]; }
获取当前目录时,对路径中的空格进行转义处理。 将: cpp if (buf[i] == '\\') { s1 += buf[i]; s1 += '\\'; }
改为: cpp if (buf[i] == ' ') { s1 += "\\ "; } else if (buf[i] == '\\') { s1 += buf[i]; s1 += '\\'; }
在拼接命令字符串时,将路径参数用引号包裹起来。 将: 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命令并将文件移动到指定目录了。
【相关推荐】