如何用批处理或VBS获取并删除文件夹内所有指定版本号文件?

你好,文件夹内有很多文件属性里面版本号是1.0和版本号是2.0且有几种类型的文件,比如dll和EXE,如何删除所有2.0版本号dll和EXE文件,谢谢

可以使用批处理或VBS脚本来实现,具体步骤如下:
1. 使用dir命令搜索文件夹内所有文件,并将结果保存到一个文本文件中。
2. 使用findstr命令搜索文本文件中所有版本号为2.0的文件,并将结果保存到另一个文本文件中。
3. 使用findstr命令搜索文本文件中所有dll和EXE文件,并将结果保存到另一个文本文件中。
4. 使用for命令循环读取文本文件中的每一行,并使用del命令删除指定版本号的dll和EXE文件。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-02-13

不清楚你的实际文件/情况,仅以问题中的样例说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的多个文件放一起双击运行

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 查找当前目录里指定版本号的dll和exe文件
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$sa=New-Object -ComObject 'Shell.Application';
$num=0;
$objfolder=$sa.NameSpace(0);
for($i=0;$i -le 400;$i++){
    if($objfolder.GetDetailsOf($null, $i) -match 'File ?version|文件版本'){
        $num=$i;
        break;
    }
}
$reg='^'+[regex]::Escape('2.0');
$current=($env:current).trimend('\');
$files=@(dir -literal $current|?{(@('.dll','.exe') -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
    $objfolder=$sa.NameSpace($files[$i].Directory.FullName);
    $objitem=$objfolder.ParseName($files[$i].Name);
    $ver=$objfolder.GetDetailsOf($objitem, $num) -replace '\s','';
    if($ver -match $reg){$ver+'  '+$files[$i].FullName.Substring($current.length);}
}

相似回答