批处理:提取文件夹中的指定文件
发布网友
发布时间:2022-04-22 17:49
我来回答
共2个回答
热心网友
时间:2023-09-15 19:48
可以使用批处理或VBS脚本来实现,具体步骤如下:
1. 使用dir命令搜索文件夹内所有文件,并将结果保存到一个文本文件中。
2. 使用findstr命令搜索文本文件中所有版本号为2.0的文件,并将结果保存到另一个文本文件中。
3. 使用findstr命令搜索文本文件中所有dll和EXE文件,并将结果保存到另一个文本文件中。
4. 使用for命令循环读取文本文件中的每一行,并使用del命令删除指定版本号的dll和EXE文件。
热心网友
时间:2023-09-15 19:48
不清楚你的实际文件/情况,仅以问题中的样例说明及猜测为据;以下代码复制粘贴到记事本,另存为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);}
}