Win10新版运行文件修改日期对比批处理脚本闪退问题排查
故障原因
不需要安装任何额外软件即可运行批处理脚本,故障根源如下:
- 原脚本的文件新旧判断逻辑,完全依赖
xcopy命令输出中包含File关键字的文本行提取判断值。微软在Windows 10 1803(内部版本10.0.17134)中调整了xcopy命令的提示输出措辞,原有匹配规则失效,for /f循环无法捕获到有效值,导致_Newer变量始终为空。 - 后续执行
If %_Newer%==1判断时,空变量会让命令直接变成If ==1,触发cmd语法错误,脚本会立即终止运行,表现为窗口闪现后关闭。 - 这类依赖命令行工具输出文本做判断的写法本身兼容性极差,除系统版本更新会导致失效外,切换系统显示语言也会直接让脚本崩溃。
修复后的脚本
直接使用cmd原生的文件修改时间属性对比即可,不依赖任何外部命令的输出文本,兼容全版本Windows系统:
@echo off setlocal :: 定义两个待对比的文件路径 Set "_File1=D:\Steam\steamapps\common\dota 2 beta\game\dota\bin\win64\client.dll" Set "_File2=D:\Programs\client.dll" :: 先校验文件是否存在 if not exist "%_File1%" ( echo 错误:未找到文件 %_File1% pause exit /b 1 ) if not exist "%_File2%" ( echo 错误:未找到文件 %_File2% pause exit /b 1 ) :: 提取两个文件的修改时间戳 for %%a in ("%_File1%") do set "_Time1=%%~ta" for %%a in ("%_File2%") do set "_Time2=%%~ta" :: 对比时间戳,时间字符串靠后代表文件更新 if "%_Time1%" gtr "%_Time2%" ( set "_Newer=%_File1%" ) else ( set "_Newer=%_File2%" ) echo The newest file is %_Newer% Pause endlocal
内容的提问来源于stack exchange,提问作者staaandup
相关产品推荐
相关产品推荐

