Windows CMD FOR命令深度解析:从基础循环到自动化脚本引擎
1. 从一次“清理C盘”的翻车经历说起那天下午我的电脑C盘又亮起了刺眼的红色警告。作为一个常年和各种文件、开发环境打交道的“数字仓鼠”这几乎是每月一次的例行公事。我熟练地按下Win R输入cmd准备用我珍藏的“清理C盘垃圾的cmd命令”大展拳脚。命令敲下去看着命令行窗口里飞速滚动的字符心里正盘算着能腾出多少空间结果系统直接弹窗报错提示“拒绝访问”。更糟糕的是我发现之前写的一个用于批量处理图片的批处理脚本也突然“罢工”了双击后窗口一闪而过典型的“windows脚本命令闪退”。那一刻我意识到问题可能不在于那几个清理命令本身而在于我使用它们的方式尤其是脚本里那些看似简单、实则暗藏玄机的FOR命令。FOR命令这个在 Windows 命令提示符CMD和批处理脚本中看似基础的工具其实是自动化脚本的脊梁。它绝不仅仅是“循环”那么简单。从批量重命名文件、遍历目录结构、解析文本内容到与git、python、ffmpeg等外部命令联动构建复杂的自动化流水线FOR命令都是核心发动机。很多人觉得它语法古怪难记用起来常常遇到“cmd cd不跳转”、“cmd输入命令后没有反应”这类问题本质上是对其运行机制和细节参数理解不透。今天我们就抛开那些干巴巴的语法列表从一个实际运维和开发者的角度彻底拆解FOR命令让你不仅能写出能用的脚本更能写出健壮、高效、易于维护的脚本。2. FOR命令的本质不仅仅是循环更是文本处理引擎很多人把FOR命令简单地类比为编程语言里的for循环这其实低估了它的能力。在 CMD 这个相对“简陋”的环境中FOR命令的核心角色是一个基于文本流的流程控制器。它不直接操作内存中的对象或数组而是通过解析命令输出、文件内容或直接定义的列表这些文本行来驱动后续的操作。2.1 四种基本形态与核心参数解析FOR命令有四种主要的使用形态分别对应不同的数据来源。理解这一点是避免“脚本闪退”或“无反应”的第一步。1. 对一组文件进行迭代 (FOR %%variable IN (set) DO command)这是最常见的形式。(set)部分可以使用通配符例如(*.txt)表示当前目录所有txt文件。这里有一个关键细节%%variable在批处理脚本中必须用两个百分号而在直接命令行交互时用一个百分号%variable。很多新手写的脚本在命令行测试时用%i没问题保存为.bat文件运行却出错就是因为这个区别。REM 示例批量将当前目录所有 .jpg 文件备份为 .jpg.bak FOR %%I IN (*.jpg) DO ( ECHO 正在备份 %%I COPY %%I %%I.bak )注意%%I是循环变量I可以是任意字母区分大小写。括号()内的DO子句如果有多行命令必须用括号括起来。2. 对目录进行迭代 (FOR /D)/D参数用于匹配目录而不是文件。这在整理项目结构时非常有用。比如你想删除某个父目录下所有空的子文件夹或者对所有子目录执行相同的初始化操作。REM 示例列出当前目录下所有文件夹的名称 FOR /D %%D IN (*) DO ( ECHO 子目录%%D )3. 递归迭代文件或目录 (FOR /R)这是功能最强大的模式之一。/R表示递归Recursive。你需要指定一个根目录默认为当前目录FOR命令会递归地遍历该目录及其所有子目录。REM 示例递归查找整个D盘所有 .log 文件并显示其完整路径 FOR /R D:\ %%F IN (*.log) DO ( ECHO 找到日志文件%%F )这个命令经常被用来构造“扫盘代码”例如搜索特定类型的文件。但务必谨慎使用尤其是在系统盘如C盘上递归可能会触发系统文件保护导致“拒绝访问”错误或者因遍历文件过多导致脚本卡死。4. 对文本内容进行迭代 (FOR /F)这是FOR命令的精华所在也是难度最高、最容易出错的模式。/F代表“解析文件File、字符串String或命令输出Command output”。它允许你将一段文本比如一个文件的内容或者dir命令的输出按行分解再进一步将每一行按分隔符拆分成多个部分然后你可以提取需要的字段。REM 示例读取一个配置文件 config.ini提取其中 server 后面的地址 FOR /F tokens2 delims %%A IN (FINDSTR server config.ini) DO ( ECHO 服务器地址是%%A )这里‘FINDSTR “server” config.ini‘是待解析的命令输出。“tokens2 delims”是解析选项delims表示用等号作为分隔符tokens2表示取分割后的第二段即等号后面的值并赋值给变量%%A。2.2 变量扩展的魔法%%~系列修饰符当你通过FOR循环获取到一个文件的路径比如%%F时它可能是一个完整的路径如D:\Projects\test\image.jpg。但很多时候我们只需要文件名、扩展名或者父目录。这时就需要使用变量扩展修饰符。%%~dF仅提取驱动器号D:%%~pF仅提取路径\Projects\test\%%~nF仅提取文件名不含扩展名image%%~xF仅提取扩展名.jpg%%~fF完整的绝对路径%%~tF文件最后修改日期时间组合使用威力更大%%~dpF得到D:\Projects\test\%%~nxF得到image.jpg。REM 示例将指定目录下所有MP4文件用ffmpeg转换为MP3音频并以原文件名保存 SET “SOURCE_DIRD:\Videos” SET “FFMPEG_PATHC:\tools\ffmpeg\bin\ffmpeg.exe” FOR %%V IN (“%SOURCE_DIR%\*.mp4”) DO ( ECHO 正在转换%%~nV “%FFMPEG_PATH%” -i “%%V” -q:a 0 -map a “%%~dpV%%~nV.mp3” )这个例子展示了如何结合FOR、变量扩展和外部命令 (ffmpeg) 构建一个实用的媒体处理脚本。%%~nV提取出文件名如my_video用于输出MP3文件%%~dpV确保输出文件在同一目录。3. 实战用FOR命令构建自动化工具链理解了基本原理我们来看几个紧密结合“热搜词”场景的实战案例。这些案例会揭示那些命令列表里不会告诉你的细节和坑。3.1 案例一安全、可控的“C盘清理命令”网上流传着各种cleanmgr、del /s /q等命令但直接运行风险极高。我们可以用FOR /F构建一个更智能、可审核的清理脚本。需求安全地清理C:\Windows\Temp和当前用户Temp目录中超过7天的临时文件。思路直接del /s /q可能误删。我们先使用forfiles命令一个专门用于按日期筛选文件的工具列出待删除文件将列表保存确认后再删除。ECHO OFF REM 安全清理临时文件脚本 SET “LOG_FILEC:\Cleanup_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log” ECHO 正在搜索7天前的临时文件... “%LOG_FILE%” REM 清理系统Temp目录 FOR /F “delims” %%F IN (‘forfiles /p “C:\Windows\Temp” /s /m *.* /d -7 /c “cmd /c echo path”’) DO ( ECHO [待删除] %%F “%LOG_FILE%” REM 实际删除时取消下面一行的注释 REM DEL /F /Q “%%F” ) REM 清理用户Temp目录 SET “USER_TEMP%TEMP%” FOR /F “delims” %%F IN (‘forfiles /p “%USER_TEMP%” /s /m *.* /d -7 /c “cmd /c echo path”’) DO ( ECHO [待删除] %%F “%LOG_FILE%” REM DEL /F /Q “%%F” ) ECHO 搜索完成。请查看日志文件 “%LOG_FILE%” 确认文件列表。 ECHO 确认无误后请编辑本脚本取消 DEL 命令前的 REM 注释再次运行以执行删除。 PAUSE关键点与避坑指南delims的作用FOR /F默认会以空格和制表符分割每一行。文件路径含有空格时如Program Files会被错误分割。“delims”表示分隔符为空即整行作为一个完整的字符串处理这是处理带空格路径的必备技巧。先记录后操作所有“待删除”文件路径先写入日志 (%LOG_FILE%)而不是直接删除。给你一个反悔的机会。forfiles命令比单纯用FOR遍历更高效因为它直接集成按日期过滤 (/d -7) 的功能。权限问题清理C:\Windows\Temp可能需要管理员权限。如果遇到“拒绝访问”你需要以管理员身份运行CMD或脚本。3.2 案例二处理“cmd cd不跳转”与动态目录遍历“cd命令在FOR循环内不生效”是一个经典问题。这是因为FOR循环体DO后面的部分默认是在一个独立的子上下文sub-context中执行的或者更准确地说环境变量的更改包括当前目录%CD%在循环体内有效但不会影响循环体外的上下文且对后续的循环迭代本身也无影响。REM 错误示范试图进入每个子目录并列出文件 FOR /D %%D IN (*) DO ( CD “%%D” DIR *.txt CD.. )上面的CD..可能无法让你回到初始目录因为每次循环的CD都基于上一次的目录不更复杂。实际上在批处理中括号内的多条命令是作为一个整体执行的但环境变化在循环持续期间会累积吗测试一下会发现行为诡异。正确做法使用PUSHD和POPD命令或者直接使用绝对路径。REM 方法一使用 PUSHD/POPD 推荐 FOR /D %%D IN (*) DO ( PUSHD “%%D” ECHO 现在在目录%CD% DIR *.txt POPD ) REM 方法二直接使用绝对路径引用 FOR /D %%D IN (*) DO ( ECHO 处理目录%%D DIR “%%D\*.txt” )PUSHD将当前目录保存到栈并切换到新目录POPD恢复之前的目录。这是处理需要切换工作目录的循环任务时最安全、最清晰的方式。3.3 案例三解析命令输出并与Python/Git联动FOR /F是连接CMD与其他强大工具如git、python的桥梁。场景你有一个包含多个Git仓库的父目录需要批量拉取所有仓库的最新代码。ECHO OFF SET “PARENT_DIRD:\GitProjects” FOR /D %%R IN (“%PARENT_DIR%\*”) DO ( ECHO ———————————————— ECHO 正在处理仓库%%~nxR PUSHD “%%R” REM 检查是否是git仓库 IF EXIST “.git” ( git pull IF !ERRORLEVEL! EQU 0 ( ECHO [成功] %%R 更新完成。 ) ELSE ( ECHO [失败] %%R 更新出错请手动检查。 ) ) ELSE ( ECHO [跳过] %%R 不是Git仓库。 ) POPD ) ECHO 所有仓库处理完毕。 PAUSE关键点%%~nxR提取出仓库文件夹的名字让输出更清晰。IF EXIST “.git”判断是否为Git仓库避免对普通文件夹执行git命令。!ERRORLEVEL!用于检查上一条命令git pull的退出代码。在启用延迟变量扩展的环境中!ERRORLEVEL!可以获取动态更新的错误码。这里判断如果为0成功则输出成功信息。与Python联动你可以用FOR /F捕获Python脚本的输出并在批处理中决策。REM 假设有一个python脚本 check_status.py输出 “OK” 或 “ERROR” FOR /F %%O IN (‘python check_status.py’) DO ( IF “%%O”“OK” ( ECHO 状态正常继续执行... CALL next_step.bat ) ELSE ( ECHO 状态异常停止流程。 EXIT /B 1 ) )4. 高级技巧与致命陷阱规避掌握了基础应用后一些高级技巧和深坑能让你写出真正专业的脚本。4.1 延迟变量扩展 (!var!) 与循环变量这是批处理脚本中最大的坑之一。在FOR循环体内如果你试图使用或修改一个在循环开始前定义的变量并且这个变量的值在循环中会发生变化那么你必须使用延迟变量扩展。ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET COUNT0 FOR %%F IN (*.txt) DO ( SET /A COUNT1 ECHO 文件 !COUNT!%%F 使用延迟扩展 REM 错误示范ECHO 文件 %COUNT%%%F 这里%COUNT%永远显示0 ) ENDLOCAL不加SETLOCAL ENABLEDELAYEDEXPANSION和!COUNT!%COUNT%会在整个FOR命令解析之初就被替换成其当时的值0循环体内无论怎么SET /A COUNT1ECHO看到的始终是0。启用延迟扩展后!COUNT!会在命令执行时才被求值从而得到正确递增的值。4.2 处理特殊字符空格、引号、感叹号文件名和路径中的特殊字符是脚本崩溃的常见原因。空格所有路径变量都用双引号括起来如“%%F”。引号如果文件名本身含引号极少见处理起来非常麻烦。通常的变通方案是使用usebackq选项配合FOR /F。感叹号 (!)一旦启用了延迟变量扩展 (ENABLEDELAYEDEXPANSION)文件名中的感叹号会被当作延迟变量标识符而“吃掉”。例如文件my!file.txt在循环中可能变成myfile.txt。解决方案在循环内部临时关闭延迟扩展。ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION FOR %%F IN (*.*) DO ( SET “filename%%F” REM 为了安全地显示可能包含!的文件名临时切换到正常扩展模式 SETLOCAL DISABLEDELAYEDEXPANSION ECHO 原始文件名%%F ENDLOCAL REM 后续处理可以使用延迟扩展但操作的是没有!的变量值 ECHO 处理后的文件名!filename! )这个技巧有点绕但它是处理包含感叹号文件的唯一可靠方法。核心思想是在需要访问原始变量%%F时创建一个新的局部环境关闭延迟扩展。4.3 性能优化避免在循环内调用外部程序在FOR循环的DO子句中尽量避免调用启动缓慢的外部程序。特别是当循环次数很多时例如遍历数万个文件每次循环都启动一次python、ffmpeg或git将是性能灾难。优化策略批量处理如果可能将参数列表准备好一次性传给外部程序。例如用FOR生成一个文件列表然后让ffmpeg或图像处理工具一次处理多个文件。使用内置命令或更轻量的方法能用COPY、XCOPY、REN完成的就不要调用其他语言写的脚本。衡量开销对于成百上千次的迭代即使每次调用只多花10毫秒总时间也会非常可观。4.4 错误处理与日志记录一个健壮的脚本必须处理错误。在FOR循环中你可以检查ERRORLEVEL或!ERRORLEVEL!在延迟扩展下。FOR %%I IN (1 2 3) DO ( SOME_COMMAND_THAT_MIGHT_FAIL IF NOT !ERRORLEVEL! EQU 0 ( ECHO [错误] 处理第 %%I 项时失败错误码!ERRORLEVEL! “error.log” REM 可以选择继续执行或者用 GOTO 跳出循环 ) )同时将关键操作和结果输出到日志文件是后期排查“脚本为什么没生效”或“为什么闪退”的宝贵依据。就像我们在清理C盘的例子中做的那样。5. 从FOR命令看CMD脚本的哲学经过对FOR命令的深度拆解我们再回头看那些热搜词里的问题很多都有了答案。“为什么win加r打不开cmd”可能是系统环境变量被修改或者快捷方式被破坏但这与FOR无关。“windows脚本命令闪退”很可能是脚本中有语法错误如FOR的百分号用错或者路径错误导致命令执行失败窗口瞬间关闭。你可以在脚本开头加PAUSE或在最后加 log.txt 21将输出重定向到文件来捕获错误信息。FOR命令 embodies了经典CMD/批处理脚本的哲学基于文本、管道连接、工具组合。它不追求面向对象的优雅而是提供一种将简单命令粘合起来解决复杂问题的原始力量。学习它的过程就是学习如何在这种约束下进行有效抽象和流程设计。当你熟练掌握了FOR特别是/F选项你会发现很多看似需要Python或PowerShell的任务用几行批处理就能快速搞定尤其是在那些需要与老旧系统或纯CLI环境打交道的场景里。最后我个人最常用的一条FOR命令是用于快速统计文件数量的变体FOR /F %%A IN (‘dir /b ^| find /c /v “”‘) DO SET FILE_COUNT%%A。这条命令结合了dir /b裸列表、find /c计数和FOR /F捕获输出巧妙地避免了因为文件名含空格而直接使用FOR %%A IN (*) DO计数可能带来的问题。它提醒我在CMD的世界里创造力往往体现在如何巧妙地组合这些简单的工具而不是寻找一个万能的瑞士军刀。

相关新闻

阿里云Model Studio上下文缓存:大模型API调用降本增效实战指南

阿里云Model Studio上下文缓存:大模型API调用降本增效实战指南

在实际 AI 应用开发中,模型推理成本是项目持续运营的关键考量。尤其是在处理长文本、多轮对话等需要维护大量上下文(Context)的场景,每次调用大模型 API 时,重复发送相同的上下文会消耗大量 Token,直接推高…

2026/10/12 4:20:35 阅读更多 →
激光焊接设备买回去卡在产线集成?五维框架评估自动化真功夫

激光焊接设备买回去卡在产线集成?五维框架评估自动化真功夫

所谓激光焊接产线自动化集成能力,不是看你卖了几台焊机,而是看你有没有本事把焊机、机器人、视觉系统、检测设备、MES系统拧成一条真正能跑起来的产线。这个能力差距,是很多采购经理踩过坑之后才意识到的。一个真实场景:某新能源企…

2026/10/12 4:21:19 阅读更多 →
PotPlayer与VLC书签功能深度对比:构建高效视频学习与素材管理系统

PotPlayer与VLC书签功能深度对比:构建高效视频学习与素材管理系统

1. 项目概述:播放器书签的深度价值如果你经常用PotPlayer或VLC观看长视频,比如一场3小时的讲座、一部纪录片,或者自己录制的游戏实况,肯定遇到过这样的场景:看到某个关键点,想做个标记,等会儿回…

2026/10/15 15:20:34 阅读更多 →

最新新闻

NumPy综合实战:从数据清洗到向量化性能优化

NumPy综合实战:从数据清洗到向量化性能优化

1. 项目到底在解决什么问题——为什么要单独拿NumPy做一次综合案例做数据分析这一行,有个很有意思的现象:很多人一上来就学Pandas,DataFrame用得飞起,groupby、merge、pivot_table一套接一套,但真到处理大规模数值计算…

2026/10/15 23:49:01 阅读更多 →
Diagram-Design:可执行系统逻辑骨架的建模方法论

Diagram-Design:可执行系统逻辑骨架的建模方法论

1. 项目概述:这不是画图,是构建可执行的系统逻辑骨架“diagram-design”这个词组乍看像美术课作业,但在我过去十年带过的几十个跨领域项目里,它从来不是PPT里的装饰性插图,而是工程师、产品负责人、甚至一线运维人员每…

2026/10/15 23:49:01 阅读更多 →
影刀RPA+Android模拟器:手机端数据采集自动化环境搭建全攻略

影刀RPA+Android模拟器:手机端数据采集自动化环境搭建全攻略

1. 为什么要搭这套环境:手机端数据采集的痛点与破局思路先说个很实际的场景。很多做电商选品、本地生活商家调研、社交平台内容监控的朋友,都遇到过这么一档子事:某些核心数据只存在于手机App里,PC网页端要么不展示,要…

2026/10/15 23:49:01 阅读更多 →
NumPy综合实战:从数据清洗到综合评分

NumPy综合实战:从数据清洗到综合评分

从标题就能看出来,这是一个偏入门到进阶之间的综合练习:数据规模不大,但计算过程完整体现了NumPy的清洗、聚合、排序、相关性、评分和性能优化。这个案例我拿它做过很多次演示,每次讲完都有人感叹“原来NumPy还能这么用”。如果你…

2026/10/15 23:49:01 阅读更多 →
React高频面试200题:从死记硬背到真正懂原理

React高频面试200题:从死记硬背到真正懂原理

做前端面试辅导这件事,我干了快八年。最近很多准备跳槽的朋友拿着“2026年大厂前端高频面试原题-React框架200题”这类题单来问,说是不是背完这些就能稳拿Offer。每次看到这种问法,我都挺着急的。面试尤其是React方向,重点从来不是…

2026/10/15 23:49:01 阅读更多 →
OpenClaw接入DeepSeek与百炼:密钥验证与网络调试全记录

OpenClaw接入DeepSeek与百炼:密钥验证与网络调试全记录

前段时间我把工作流里的模型接入层整理了一遍,顺手给 OpenClaw 配上了 DeepSeek 和百炼大模型两个入口。原本以为就是填两个 Base URL、粘两串 API Key 的事,结果从密钥验证到网络连通,前后折腾了小半天,踩了不少隐蔽的坑。这篇文…

2026/10/15 23:48:01 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →