之前写过一个小工具,名字叫《简易小工具实现批量打开多个网页》,看后台下载有不少网友下载了,但是在最近的使用过程中,我发现一个问题,如果网址中包含特殊字符“&”,则网址无法正常打开,调试了一下发现,原来system命令无法直接处理带有&符号的网址,尝试将网址进行常规的网址转义,类似下方
空格 - %20 " - %22 # - %23 % - %25 & - %26 ( - %28 ) - %29
但命令行仍然无法处理,最后经过苦心搜索,终于找到答案,在这里直接贴出代码,需要成品的可以直接在文章末尾下载。
核心代码如下:
//author:autumoon
//联系邮箱:9506#163.com
//日期:2023-04-06
// batWebsites.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <thread>
#include "../../Common/often/StdStrFile.h"
/************************************************************************
在Windows命令行中,特殊字符需要使用转义符号来输出。以下是一些常见的特殊字符和对应的转义符号:
特殊字符 | 转义符号
-------- | --------
& | ^&
< | ^<
> | ^>
| | ^ |
" | ^"
' | ^'
{ | ^{
} | ^}
(| ^ (
) | ^)
例如,要在命令行中输出“Hello & World”,需要使用“^&”来表示“&”字符:
/************************************************************************/
int main()
{
//读取配置文件
_tstring stWebPath = L"urls.txt";
std::vector<_tstring> vUrls;
size_t nLineCount = CStdFile::ParseTXTFile(stWebPath, vUrls);
if (nLineCount <= 0 || nLineCount > 100)
{
CStdFile::SaveTXTLine(stWebPath, L"www.baidu.com");
system("start www.baidu.com");
return -1;
}
for (size_t i = 0; i < nLineCount; i++)
{
_tstring stUrl = vUrls[i];
stUrl = CStdStr::ReplaceAllDistinct(stUrl, L"&", L"^&");
_tstring stCmd = L"start " + CStdStr::AddQuoteIfContains(stUrl);
if (i % 3 == 0)
{
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
std::string sCmd = CStdStr::ws2s(stCmd);
system(sCmd.c_str());
}
return 0;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
欢迎交流与讨论。