🔧 经验交流

轻文本文件格式转换 Everything全文检索 | 天语手机去广告 | 豆包沟通记录 | 链接窗口属性录

轻文本文件格式转换

轻文本文件格式定义

首先我们对轻文本文件进行定义。这里说的清文本通常是指在AI中进行交流的文本文件,典型的就是Markdown文件和HTML文件。但是呢,它们的输出通常是版式文件形式,即PDF,所以可能会有之间的相互转换关系问题。
件格式转换通常分为两大类。第一类是工作过程流式文件的转换,比如HTML和和Markdown之间的文件转换。
另外一种是流式文件向版式文件的转换,即固化出最终成果的输出。
其实还有一种大家很热门的,就是把PDF转成文本文件或Word文件或怎么样。我这个不太感兴趣,因为我认为版式文件就是不能动的!你用的只不过是其中的素材而已。所以把版式文件格式再转换成流式文件的非常美观的格式,不是我所需要的。

需求

进入正题,我通常现在使用Markdown写文本,会转成HTML放到我的个人网站,这是我第一个需求。另外有必要的时候,还需要把这里的Markdown文件或者是HTML文件转成PDF给别人使用。因此形成了我在这个三种文件之间的格式转换的需求。
其实三种文件转换的工具很多,通常Markdown的文件转成HTML和PDF都有。我也测试过不少的东西,但是总是不是那么特别理想。
要么还需要准备很多个插件,要不然还需要这样那样,还有些中文识别、字乱码等等之类。也包括我常用的微软的Edge浏览器,它输出的时候呢,汉字形态不可复制也是我不喜欢的。
经过和豆包交流,最终我定为用Pandoc来解决。单一的各种文件之间的转换,像MD to PDF、MD to HTML、MD和HTML互转等,都很容易实现。我感觉它比较麻烦,因此我提出了一个需求。建立一个文件夹是Input,一个文件夹Output,执行程序另说。写一个批处理文件,将input的任何文件,当然了,也就是HTML和MD转到输出上去。命令呢相当于是星点星,输入的是星点星,输出呢是星点PDF、星点HTML和星点MD。
经过一番折腾,很快就实现了。为了提升输出质量,我在PDF这个格式上增加了页眉和页脚的页码调用。

同理,word文件也可以按照这个策略进行转换。

目录结构和准备

我的目录结构如图。

C:\pandoc>
	│  pandoc.exe
	│  wkhtmltoimage.exe
	│  wkhtmltopdf.exe
	├─input
	├─output
	└─templates
		footer.html
		header.html
		template.html

Pandoc目录放在C盘的根部下,主程序exe文件在pandic下,也包括一些辅助的exe文件。Pandoc下面设了三个子目录,input、output、templates。
Input用于放置源文件,主要是MD格式后缀和HTML后缀文件。Output是转换后存放输出文件的位置。Templates文件夹主要是放HTML的模板使用,也包括页眉和页脚的那个格式文件。

具体操作

首先按照AI给我提供的信息,去下载Pandoc和其他两个准备资料(wkhtmltoimage和wkhtmltopdf)。随后逐个测试单个文件的转换功能。单一文件转换很容易很快,一下就过去了。就是PDF转换,虽然很容易过,但是我的要求是带页眉、带页脚,页脚的号码是自动产生的,等等之类。这个费了一番功夫。
准备工作都做完了,最后的工作是写bat收尾。不论怎么讲,bat收尾还是花了点时间,因为它会联动很多东西,一会修改它,还要修改一些其他的辅助文件。

测试使用效果

最后进行全面测试,在Input文件夹里面放了MD文件若干,HTML文件若干。然后执行BAT文件,Output文件夹产生三类后缀的文件,分别是MD、HTML和PDF,文件名与原始名一样。PDF的页眉页脚支持是在两个html文件里面进行修改,也包括它的页边距之类的,是通过BAT文件进行修改。
其实我这里最兴奋的是input里边的星点星文件,到output里边也是原来的文件名和新后缀!

技术成果固化

最终的技术成果固化包括三个bat文件,一个是实现“*.md” to “*.html”,一个是实现“*.html” to “*.md” ,第三个是实现“*.*” to “pdf”,最后一个是实现“*.*” to “*.*”(任何对任何的输出三种格式)。
如下成果的案例是任何对任何的输出三种格式的批处理,路径是建立在我的如下文件目录结构基础上上,文件支持转换PDF的CSS格式、页眉和页脚,在这里就不陈述了。bat文件仅供参考。本人不对操作过程产生的任何其它风险负责。

工作路径:

	  C:\pandoc>
		│  pandoc.exe
		│  wkhtmltoimage.exe
		│  wkhtmltopdf.exe
		│
		├─input
		│   output.html
		│   test.html
		│
		├─output
		│   output.pdf
		│   test.md	
		└─templates
		    footer.html
		    header.html
		    template.html

bat内容:

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: ========== 配置区【所有参数在这里统一修改】 ==========
set "PANDOC=C:\pandoc\pandoc.exe"               :: pandoc程序路径
set "WKHTML=C:\pandoc\wkhtmltopdf.exe"  		:: wkhtmltopdf程序路径
set "TEMPLATE=file:C:\pandoc\templates\template.html"  :: pandoc转换HTML正文模板
set "HEADER_HTML=C:\pandoc\templates\header.html"      :: PDF页眉HTML文件
set "FOOTER_HTML=C:\pandoc\templates\footer.html"      :: PDF页脚HTML文件
set "INPUT_DIR=C:\pandoc\input"                 :: 待转换源文件目录
set "OUT_ROOT=C:\pandoc\output"                 :: 转换输出目录

:: PDF页面边距,上下左右预留页眉页脚空间
set "MARGIN_TOP=25mm"                           :: 页面上边距(给页眉预留空间)
set "MARGIN_BOTTOM=25mm"                        :: 页面下边距(给页脚预留空间)
set "MARGIN_LEFT=25mm"                          :: 页面左边距
set "MARGIN_RIGHT=25mm"                         :: 页面右边距

:: 页眉页脚位置控制参数
set "HEADER_SPACING=3"                          :: 页眉与正文之间的间距(mm),数值变大,页眉远离正文
set "FOOTER_SPACING=8"                          :: 页脚与正文之间的间距(mm),数值变大,页脚远离正文
:: ======================================================

if not exist "%OUT_ROOT%" mkdir "%OUT_ROOT%"     :: 如果输出目录不存在,则创建文件夹

echo ==============================================
echo Pandoc批量转换工具【header+footer双外部HTML模式】
echo 输入目录:%INPUT_DIR%
echo 输出目录:%OUT_ROOT%
echo PDF页边距:上%MARGIN_TOP% 下%MARGIN_BOTTOM% 左%MARGIN_LEFT% 右%MARGIN_RIGHT%
echo 页眉文件:%HEADER_HTML%
echo 页脚文件:%FOOTER_HTML%
echo 页眉间距:%HEADER_SPACING% mm
echo 页脚间距:%FOOTER_SPACING% mm
echo ==============================================
echo.

:: 循环遍历input目录下全部文件
for %%i in ("%INPUT_DIR%\*.*") do (
    set "FILE=%%~fi"
    set "NAME=%%~ni"
    set "EXT=%%~xi"
    echo 处理文件:%%~nxi

    if /i "!EXT!"==".md" (
        :: MD -> HTML:Markdown转HTML,使用template模板
        "%PANDOC%" "!FILE!" --template="!TEMPLATE!" -o "%OUT_ROOT%\!NAME!.html"
        if !errorlevel! equ 0 (
            echo    ✅ md->html 成功
        ) else (
            echo    ❌ md->html 失败
        )

        :: MD -> PDF:先调用pandoc生成临时HTML,再用wkhtmltopdf转为PDF
        set "TMP_HTML=%OUT_ROOT%\!NAME!_tmp.html"
        "%PANDOC%" "!FILE!" --template="!TEMPLATE!" -o "!TMP_HTML!"
        if !errorlevel! equ 0 (
            echo    开始wkhtmltopdf转换PDF
            "%WKHTML%" --encoding utf-8 --page-size A4 --enable-javascript --enable-local-file-access --load-error-handling ignore --margin-top 25mm --margin-bottom 25mm --margin-left 25mm --margin-right 25mm --header-html "!HEADER_HTML!" --header-spacing !HEADER_SPACING! --footer-html "!FOOTER_HTML!" --footer-spacing !FOOTER_SPACING! "!TMP_HTML!" "%OUT_ROOT%\!NAME!.pdf"
            if !errorlevel! equ 0 (
                echo    ✅ md->pdf 成功
            ) else (
                echo    ❌ md->pdf 失败
            )
        ) else (
            echo    ⚠️ 跳过PDF生成:临时HTML构建失败
        )
        if exist "!TMP_HTML!" del "!TMP_HTML!"       :: 删除临时HTML文件

    ) else if /i "!EXT!"==".html" (
        :: HTML -> MD:HTML反向转回Markdown
        "%PANDOC%" "!FILE!" -f html -t markdown -o "%OUT_ROOT%\!NAME!.md"
        if !errorlevel! equ 0 (
            echo    ✅ html->md 成功
        ) else (
            echo    ❌ html->md 失败
        )
        copy "!FILE!" "%OUT_ROOT%\!NAME!.html" >nul  :: 将原HTML原样复制到输出目录

        :: HTML -> PDF:直接把HTML转PDF
        echo    开始wkhtmltopdf转换PDF
        "%WKHTML%" --encoding utf-8 --page-size A4 --enable-javascript --enable-local-file-access --load-error-handling ignore --margin-top 25mm --margin-bottom 25mm --margin-left 25mm --margin-right 25mm --header-html "!HEADER_HTML!" --header-spacing !HEADER_SPACING! --footer-html "!FOOTER_HTML!" --footer-spacing !FOOTER_SPACING! "!FILE!" "%OUT_ROOT%\!NAME!.pdf"
        if !errorlevel! equ 0 (
            echo    ✅ html->pdf 成功
        ) else (
            echo    ❌ html->pdf 失败
        )
    ) else (
        echo    ⏭️ 跳过不识别后缀:!EXT!
    )
    echo.
)

echo ==============================================
echo 全部任务执行完毕
echo 输出文件目录:%OUT_ROOT%
echo ==============================================
pause

图片格式转webp

与轻文本格式转换相同思路,实现jpg和png转换成webp图片格式,便于轻量化使用。转换氛围两种,一种是有损转换,一种是无损转换。不展开。
要转换的文件放在input目录,运行bat转换后的文件放在了output。

同理,视频文件也可以按照这个策略进行转换便于浏览器使用,甚至输出webm格式。

目录格式


  C:\ffmpeg>
	├─bin
	|  ffmpeg.exe
	|  ffplay.exe
	|  fprobe.exe
	├─doc
	├─input
	├─output
	└─presets
		

无损代码

@echo off
chcp 65001 >nul
set "BASE=C:\ffmpeg"
set "SRC=%BASE%\input"
set "DST=%BASE%\output"
set "FFMPEG=%BASE%\bin\ffmpeg.exe"
:: 无损模式下 -quality 参数失效,注释保留仅作对照参考
set "QUALITY=85"
if not exist "%DST%" mkdir "%DST%"
echo.
echo === JPG/PNG ^> WebP 【无损】批量转换 (FFmpeg libwebp) ===
echo FFMPEG: %FFMPEG%
echo 源目录: %SRC%
echo 输出目录: %DST%
echo 模式: LOSSLESS 无损WebP(保留PNG透明通道,画质无损失,文件更大)
echo.
if not exist "%FFMPEG%" (
    echo 【错误】找不到 ffmpeg.exe
    pause
    exit /b
)
set "count=0"
set "skip=0"
for %%f in ("%SRC%\*.jpg" "%SRC%\*.png") do (
    if not exist "%DST%\%%~nf.webp" (
        echo 正在转换: %%~nxf
        :: ===================== 修改点 =====================
        :: -lossless 1 开启libwebp无损编码
        :: 无损模式不要写 -quality,该参数在lossless下无效
        "%FFMPEG%" -i "%%f" -c:v libwebp -lossless 1 "%DST%\%%~nf.webp"
        :: ==================================================
        set /a count+=1
    ) else (
        echo 跳过已存在: %%~nf.webp
        set /a skip+=1
    )
)
echo.
echo ======================================
echo 本次完成: %count% 个文件
echo 跳过已有: %skip% 个文件
echo ======================================
pause

		

有损代码(85%精度)

@echo off
chcp 65001 >nul
set "BASE=C:\ffmpeg"
set "SRC=%BASE%\input"
set "DST=%BASE%\output"
set "FFMPEG=%BASE%\bin\ffmpeg.exe"
set "QUALITY=85"

if not exist "%DST%" mkdir "%DST%"

echo.
echo === JPG/PNG ^> WebP 批量转换 (FFmpeg libwebp) ===
echo FFMPEG: %FFMPEG%
echo 源目录: %SRC%
echo 输出目录: %DST%
echo 质量: %QUALITY%
echo.

if not exist "%FFMPEG%" (
    echo 【错误】找不到 ffmpeg.exe
    pause
    exit /b
)

set "count=0"
set "skip=0"

for %%f in ("%SRC%\*.jpg" "%SRC%\*.png") do (
    if not exist "%DST%\%%~nf.webp" (
        echo 正在转换: %%~nxf
        "%FFMPEG%" -i "%%f" -c:v libwebp -quality %QUALITY% "%DST%\%%~nf.webp"
        set /a count+=1
    ) else (
        echo 跳过已存在: %%~nf.webp
        set /a skip+=1
    )
)

echo.
echo ======================================
echo 本次完成: %count% 个文件
echo 跳过已有: %skip% 个文件
echo ======================================
pause


		

Everything 全文检索

📌 开启内容索引

  1. 菜单栏 工具 → 选项
  2. 左侧选择 索引 → 内容
  3. 勾选 启用内容索引
  4. 设置:
    • 仅包含文件夹: 添加常用文档目录(如 D:\文档)
    • 仅包含文件类型: *.txt;*.docx;*.pdf;*.md;*.py
  5. 点击确定,等待索引完成
⚠️ 注意: 内容索引占用内存,建议只索引重要文档目录(官方建议不超过 1GB 文本内容)。

📌 搜索语法

需求 输入示例 说明
搜包含某词的文件content:"项目预算"英文双引号包裹短语
限定文件类型.pdf content:"合同条款"只在 PDF 中搜
同时匹配文件名+内容报告 content:"2024Q3"文件名含"报告"且内容含"2024Q3"
多条件 ANDcontent:验收 content:标准内容同时含这两个词
排除某词content:机器学习 !content:深度学习含前者不含后者

天语手机去广告

📌 核心思路

  • ADB 调试 → 冻结/删除系统应用
  • 替换桌面(微软桌面 + 酷安)
  • 关闭应用商店推送

📌 开启 ADB 调试(天语 i13)

  1. 打开 设置
  2. 滑到底部 → 关于手机(或"我的设备")
  3. 找到 版本号 → 连续点击 7 次
  4. 返回设置 → 系统 或 更多设置 → 开发者选项
  5. 打开 USB 调试

📌 ADB 操作命令

# 进入 ADB 目录 cd /d D:\platform-tools # 查看设备 adb devices # 开启无线调试 adb tcpip 5555 adb connect 手机IP:5555 # 查看已安装包(过滤 store) adb shell pm list packages | findstr store # 冻结应用(示例) adb shell pm disable-user --user 0 包名 # 卸载应用(示例) adb uninstall 包名

📌 关闭系统广告(手动设置)

  1. 桌面设置: 长按空白处 → 关闭"热门推荐、猜你喜欢"
  2. 系统广告总开关: 设置 → 搜索"广告" → 关闭"个性化广告"
  3. 安全设置: 设置 → 安全 → 关闭"应用推荐"
  4. 应用商店: 我的 → 设置 → 关闭"推荐通知、个性化推荐"
  5. 通知管理: 设置 → 通知 → 显示系统应用 → 关闭"精品推荐、热门推荐"
  6. 重启手机
✅ 效果: 广告弹窗全部消失,系统流畅,桌面清爽。

豆包沟通记录

下面是天语i13 专用、一步步照做即可的关闭“热门推荐/系统广告”教程(适配它的原生安卓系统):

一、桌面热门推荐、文件夹猜你喜欢

  1. 长按桌面空白处 → 桌面设置
  2. 关闭:热门推荐、智能推荐、猜你喜欢、负一屏(有就关)
  3. 打开任意文件夹 → 点右上角设置 → 关闭猜你喜欢

二、系统广告总开关(最重要)

  1. 设置 → 搜索框输入:广告

  2. 进入广告与隐私

  3. 全部关闭:

    • 个性化广告
    • 个性化推荐
    • 广告跟踪/设备标识
  4. 返回 → 搜索系统广告 → 关闭系统工具广告(如出现)

三、安全里的应用推荐(必关)

  1. 设置 → 安全 → 更多安全设置
  2. 关闭:应用推荐/安装推荐

四、应用商店推荐

  1. 打开应用商店 → 我的 → 设置
  2. 关闭:推荐通知、热门应用、活动提醒、个性化推荐

五、通知栏里的“热门推荐/精品推荐”

  1. 设置 → 通知与状态栏 → 应用通知管理
  2. 右上角点“显示系统应用”
  3. 找到并关闭:
    • 精品推荐、热门推荐、系统服务、智能服务、资讯推送
    • 每个都点进去 → 关闭允许通知

六、文件管理、浏览器推荐

七、最后一步

重启手机。

做完这7步,天语i13 的“热门推荐、弹窗、资讯广告”基本就干净了。

链接窗口属性

target 值		作用范围
_self			在当前 iframe 内加载(你原来的问题根源)
_parent			在父级 frame 加载(跳出一层)
_top			在最顶层窗口加载(跳出所有嵌套)
_blank			在新标签页打开