**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我是编程新手,我正在尝试做一个小应用程序,可以删除文件夹Downloads
、Documents
、Pictures
和桌面中的文档。
现在,我有4个脚本,但我只想拥有必须运行的.exe
应用程序。
这就是为什么我希望我的C++应用程序编写我之前定义的脚本,执行它,然后删除它。
我有一个方法,可以用在你好世界上,但是不知怎么的,它不适合我的剧本。
此代码的错误代码:
void cleardown() {
cout <<"Starting Batch File...\n";
ofstream batch;
batch.open("down.bat", ios::out);
batch << "@echo off\n";
batch <<"SETLOCAL";
batch <<"SET \"sourcedir3=C:\Users\%username%\Downloads\"\n" ;
batch <<"SET \"keepfile=POOL.bat\"\n";
batch <<"FOR %%a IN (\"%sourcedir3%\* \") DO IF /i NOT \"%%~nxa"=="%keepfile%\" DEL \"%%a\"\n";
batch <<"GOTO :EOF\n";
batch.close();
system("down.bat & del down.bat");
cout <<"Done!" << endl;
delay();
system ("cls");
}
|81|error: no match for 'operator==' (operand types are 'std::basic_ostream<char>' and 'const char [23]')|
第81行是这一行:
batch <<"FOR %%a IN (\"%sourcedir3%\* \") DO IF /i NOT \"%%~nxa"=="%keepfile%\" DEL \"%%a\"\n";
下面是列出的函数之一的代码:
void cleardown() {
cout <<"Starting Batch File...\n";
ofstream batch;
batch.open("down.bat", ios::out);
batch << "@echo off\n";
batch <<"SETLOCAL";
batch <<"SET "sourcedir3=C:\Users\%username%\Downloads"\n" ;
batch <<"SET "keepfile=POOL.bat"\n";
batch <<"FOR %%a IN ("%sourcedir3%\*") DO IF /i NOT "%%~nxa"=="%keepfile%" DEL "%%a"\n";
batch <<"GOTO :EOF\n";
batch.close();
system("down.bat & del down.bat");
cout <<"Done!" << endl;
delay();
system ("cls");
}
2条答案
按热度按时间vmdwslir1#
这是我的最终结果,结束了工作thx为您的帮助@ π ντα ε
jtjikinw2#
发生编译器错误的原因是您没有转义字符串文字中
==
周围的2个"
字符:因此,最后只执行以下部分:
其中
<<
返回一个ostream&
对batch
的引用,然后尝试使用==
运算符将该引用与字符串文本"%keepfile%\" DEL \"%%a\"\n"
进行比较。由于ostream
没有定义这样的比较,因此编译器出错。您需要转义这2个
"
字符,例如:还有一个
\
字符也需要转义:以及其他字符串常量中的几个
\
字符:也就是说,在C++11和更高版本中,您应该考虑使用raw string literal,这样您就完全不需要担心转义字符,例如:
或者:
首先,在这种情况下,您根本没有理由写出并执行一个
.bat
文件,您可以并且应该直接从您自己的代码中删除这些文件(从而满足您的“我只想拥有.exe
应用程序”的需求),例如: