求助:我在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
相关产品推荐
相关产品推荐

