You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:我在C盘发现的这段隐藏批处理脚本具体功能是什么?

隐藏批处理脚本功能拆解

我来帮你一步步分析这段在C盘发现的隐藏批处理脚本,它主要做两件核心事情:配置Windows 10升级程序的开机一次性运行项,以及扫描所有磁盘清理升级相关的大体积镜像文件。

先看完整脚本代码:

@echo off setlocal set _RunOnceValue=%~d0%\Windows10Upgrade\Windows10UpgraderApp.exe /SkipSelfUpdate set _RunOnceKey=Windows10UpgraderApp.exe REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "%_RunOnceKey%" /t REG_SZ /F /D "%_RunOnceValue%" PowerShell -Command "&{ Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Used -gt 0 } | ForEach-Object { $esdOriginalFilePath = 'C:\Windows10Upgrade\\*.esd'; $driveName = $_.Name; $esdFilePath = $esdOriginalFilePath -replace '^\w',$driveName; if (Test-Path $esdFilePath) { Remove-Item $esdFilePath } } }"

一、批处理部分:配置开机自动运行Windows 10升级程序

这部分是脚本的核心配置逻辑,单独提取出来看:

@echo off
setlocal
set _RunOnceValue=%~d0%\Windows10Upgrade\Windows10UpgraderApp.exe /SkipSelfUpdate
set _RunOnceKey=Windows10UpgraderApp.exe
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /V "%_RunOnceKey%" /t REG_SZ /F /D "%_RunOnceValue%"

逐行解释:

  • @echo off:关闭命令行的命令回显,让脚本运行时只显示执行结果(如果有的话),不会把每一条执行的命令都打出来,保持过程隐蔽。
  • setlocal:开启局部环境变量模式,脚本里定义的变量只会在脚本运行期间生效,结束后自动消失,不会污染系统全局变量。
  • set _RunOnceValue=...:定义要执行的升级程序路径和参数。%~d0代表脚本所在的磁盘盘符(比如脚本在C盘就是C:\),后面跟着Windows 10升级程序的路径,加上/SkipSelfUpdate参数——意思是跳过升级程序自身的更新检查,直接启动升级流程。
  • set _RunOnceKey=Windows10UpgraderApp.exe:给注册表项起个名字,方便识别。
  • REG ADD ...:往系统注册表的RunOnce项里添加一条记录。RunOnce是Windows的特殊注册表项,作用是下一次系统开机时自动执行指定程序,执行完成后这条记录会被自动删除。这里就是设置开机后自动运行Windows10升级程序。

二、PowerShell部分:全磁盘清理Windows升级镜像文件

这部分负责清理升级残留的大体积文件,单独提取代码:

Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Used -gt 0 } | ForEach-Object {
    $esdOriginalFilePath = 'C:\Windows10Upgrade\\*.esd';
    $driveName = $_.Name;
    $esdFilePath = $esdOriginalFilePath -replace '^\w',$driveName;
    if (Test-Path $esdFilePath) { Remove-Item $esdFilePath }
}

逐行拆解:

  • Get-PSDrive -PSProvider FileSystem:获取系统中所有的文件系统磁盘分区(比如C、D、E盘,甚至外接U盘)。
  • Where-Object { $_.Used -gt 0 }:过滤掉完全空的或者未被使用的磁盘分区,只处理有数据的磁盘。
  • ForEach-Object:对每个符合条件的磁盘执行下面的清理操作:
    • $esdOriginalFilePath = 'C:\Windows10Upgrade\\*.esd':定义一个路径模板,指向C盘升级文件夹里的所有.esd文件——ESD是Windows升级用的镜像文件,体积通常几个GB,很占空间。
    • $driveName = $_.Name:获取当前遍历的磁盘盘符(比如D、E)。
    • $esdFilePath = ...:把模板里的C盘替换成当前磁盘的盘符,生成对应磁盘的升级镜像文件路径(比如D:\Windows10Upgrade\*.esd)。
    • if (Test-Path $esdFilePath) { Remove-Item $esdFilePath }:检查这个路径下有没有ESD文件,如果有就直接删除,释放磁盘空间。

总结

这个脚本的整体目的很明确:通过注册表RunOnce项设置,让系统下一次开机自动启动Windows 10升级程序(跳过自身更新),同时扫描所有磁盘删除升级残留的大体积ESD镜像文件,避免占用过多存储空间。

内容的提问来源于stack exchange,提问作者RAMAN BHATIA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:17:18