无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8090|回复: 27
打印 上一主题 下一主题

[求助] 通过一带通配符的文件列表查找当前系统文件生成新的完整路列表如何提高效率?

[复制链接]
跳转到指定楼层
1#
发表于 2022-4-7 17:57:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一个文件列表,如图
搜索
复制


我用一个批处理,查找当前系统下这些通配符文件,读每行通符路径,遍历目录及文件得到完整路径列表,如图


目前的代码如下,可以实现,但比较低效(有点慢)  a.txt是通符配列表,得到最终的完整路径列表pe_tmp.txt
set pelist=a.txt
title 第一阶段生成有效列表文件,稍候...
del /s /f pe_*.txt
find "\" mini\%pelist%>>pe_list.txt
for /f "delims=" %%i in (pe_list.txt) do (
for /f "delims=" %%j in ('dir /b /s "%%i"') do (
echo %%j>>pe_tmp.txt
)
)
title 第二阶段生成wimlib列表文件...
for /f "tokens=1,2 delims=:" %%a in (pe_tmp.txt) do (
echo add "%%b" "%%b">>pe_excel.txt
)

title 第三阶段把文件添加到wim
%wimlib% update mini.wim<pe_excel.txt

搜索
复制



2#
发表于 2022-4-7 18:13:17 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2022-4-7 18:14 编辑

dir是可以同时查找多个不同目录的文件的,并非只支持一个路径参数

dir /s /b c:\*.txt d:\*.jpg e:\*.mkv

还有就是多线程法,你可以用start 开多个cmd窗口来查询,最后将结果汇总
回复

使用道具 举报

3#
发表于 2022-4-7 18:23:14 | 只看该作者
最近无意间
有看到楼主在油管的视频.

点评

好像前几天播放量猛涨,但展示的是三年前的视频。。  详情 回复 发表于 2022-4-7 22:22
回复

使用道具 举报

4#
 楼主| 发表于 2022-4-7 22:22:35 | 只看该作者
plusv 发表于 2022-4-7 18:23
最近无意间
有看到楼主在油管的视频.

好像前几天播放量猛涨,但展示的是三年前的视频。。

点评

看了下, 挺不错的, 收获不少.  详情 回复 发表于 2022-4-7 22:29
回复

使用道具 举报

5#
发表于 2022-4-7 22:29:36 | 只看该作者
江南一根葱 发表于 2022-4-7 22:22
好像前几天播放量猛涨,但展示的是三年前的视频。。

看了下,
挺不错的,
收获不少.
回复

使用道具 举报

6#
发表于 2022-4-7 23:30:03 | 只看该作者
<# :
@powershell  -ex bypass -c "icm ([scriptblock]::Create((gc '%~f0' -Raw -Encoding UTF8)))"
exit
#>
#-WindowStyle Hidden
#[Ps1 To Exe]
Write-Host -ForegroundColor White ('powershell命令_hash快速txt去重')


function 排除 ($文本, $规则) {


  $文本 | Select-String -Pattern $规则 -NotMatch #排除路径
}
function 保留  ($文本, $规则) {
  $文本 | Select-String -Pattern $规则
}


function 正则替换 ($d, $a, $c) {
  $d -replace ($a, $c) #删除盘符
}
function hash去重 ($数组) {
  $set = [System.Collections.Generic.HashSet[string]]@($数组)
  $set -join "`r`n"
}


function 等待($毫秒) { Start-Sleep -Milliseconds $毫秒 }
function 显示($提示, $c) {
  $a = -Join ($提示, $c)
  Write-Host -ForegroundColor White ($a)
}
function 退出 { exit }
function 结束进程($进程名) { Stop-Process -Name $进程名 }
function 新建txt($路径, $文本) {
  Set-Content  -Path $路径 -Value $文本
}
$start = Get-Date #开始计时


$正则列表 = gc "WinSxS_wimlib格式列表.txt" #WinSxS.txt
$files = Get-Childitem -Recurse -Include 'too.txt' #X:\Windows.txt
$保存文件名= "处理完成.txt"
$正则列表 = $正则列表.replace("\","\\")
foreach ($file in $files) {  #遍历文件
  $line = GC $files -ReadCount 0
$line =$line| Select-String -Pattern ($正则列表)
}


新建txt($保存文件名) $line
  $end = Get-Date #结束计时
$max= ($end - $start).TotalSeconds
显示 ('时间: ' + $max + '秒'  ) #计算时间差
显示('执行完成,请查看WinSxS_wimlib格式列表.txt')
显示('WinSxS.txt_处理为wimlib格式列表_ps命令_无忧论坛.ps1.cmd')
显示('15秒自动退出')
等待(15000)
退出


回复

使用道具 举报

7#
发表于 2022-4-8 00:23:16 | 只看该作者
第三阶段不行
wimlib添加文件好像在同一个目录
回复

使用道具 举报

8#
发表于 2022-4-8 14:12:14 | 只看该作者
或许先将列表排序再玩比较好,没文件列表不方便试。
回复

使用道具 举报

9#
发表于 2022-4-8 22:59:33 | 只看该作者
谢谢分享。
回复

使用道具 举报

10#
发表于 2022-4-9 08:11:12 | 只看该作者
如果a.txt里只有inf,FileRepository这行就有点多余了。
具体得提供a.txt和pe_excel.txt后分析。
先将三阶段计时一下,再决定优化哪一段。
回复

使用道具 举报

11#
发表于 2022-4-9 08:42:52 | 只看该作者
第二图的catroot不知道怎么来的。

@ECHO OFF
Setlocal EnableDelayedExpansion
for /f %%d in ('dir /s/b C:\Windows\INF\a*.inf') do set d=!d! %%~nd*
echo %d%
cd /d C:\Windows\System32\DriverStore\FileRepository
for /f %%d in ('dir /b %d%') do echo add \FileRepository\%%d        \FileRepository\%%d
pause
回复

使用道具 举报

12#
发表于 2022-4-10 09:27:10 | 只看该作者
for /f "delims=" %%d in (a.txt) do (if [%%~pd]==[!p!] (set n=!n! %%~nxd) ELSE (
        if defined p (
                cd !p!
                for /f %%d in ('dir /b %n%') do echo add !p!%%d )
        set p=%%~pd
        set n=%%~nxd))

点评

这个是比较快,不过我查了下生成的列表,会把不需要的也带进来 看来是单独处理cartroot winsxs和driverstore三个目录算了  详情 回复 发表于 2022-4-10 10:07
回复

使用道具 举报

13#
 楼主| 发表于 2022-4-10 10:07:41 | 只看该作者
szwp 发表于 2022-4-10 09:27
for /f "delims=" %%d in (a.txt) do (if [%%~pd]==[!p!] (set n=!n! %%~nxd) ELSE (
        if defined p (
                 ...

这个是比较快,不过我查了下生成的列表,会把不需要的也带进来
看来是单独处理cartroot winsxs和driverstore三个目录算了
回复

使用道具 举报

14#
发表于 2022-4-10 10:12:35 | 只看该作者

for /R 代替  dir /s /b /a-d  应该也可以。
回复

使用道具 举报

15#
 楼主| 发表于 2022-4-10 10:18:05 | 只看该作者
我想到了,带"*"的行dir
不带的 if exist,
发现绕太远了

点评

在于是否需要确定文件存在  详情 回复 发表于 2022-4-10 10:47
正解。 带 * 也可以先 if exist 一下,如果 存在 ,就 dir /b /s /ad 获取 具体文件夹名字,也可以再 dir /b /s /a-d 进一步 获取 文件中文件列表。  详情 回复 发表于 2022-4-10 10:42
回复

使用道具 举报

16#
发表于 2022-4-10 10:22:31 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-4-10 10:34 编辑

for /f "delims=" %%c in (a.txt) do (
   for /r %%~dpc %%d in (%%~nxc) do (
    echo %%d
)
)


for /r 看来只能 针对 文件,不能针对 文件夹。
回复

使用道具 举报

17#
发表于 2022-4-10 10:42:50 | 只看该作者
江南一根葱 发表于 2022-4-10 10:18
我想到了,带"*"的行dir
不带的 if exist,
发现绕太远了

正解。

带 * 也可以先 if exist 一下,如果 存在 ,就  dir /b /s /ad 获取 具体文件夹名字,也可以再 dir /b /s /a-d  进一步 获取 文件中文件列表。
回复

使用道具 举报

18#
发表于 2022-4-10 10:47:38 | 只看该作者
江南一根葱 发表于 2022-4-10 10:18
我想到了,带"*"的行dir
不带的 if exist,
发现绕太远了

在于是否需要确定文件存在

点评

del /s /f pe_*.txt find "\" mini\%pelist%>pe_list.txt type pe_list.txt|findstr /v /m "*">pe_add.txt type pe_list.txt|findstr /I "*">pe_dir.txt for /f "delims=" %%i in (pe_dir.txt) do ( dir  详情 回复 发表于 2022-4-10 11:15
回复

使用道具 举报

19#
 楼主| 发表于 2022-4-10 11:15:53 | 只看该作者
szwp 发表于 2022-4-10 10:47
在于是否需要确定文件存在


del /s /f pe_*.txt
find "\" mini\%pelist%>pe_list.txt
type pe_list.txt|findstr /v /m "*">pe_add.txt
type pe_list.txt|findstr /I "*">pe_dir.txt


for /f "delims=" %%i in (pe_dir.txt) do (
dir /s /b "%%i">>pe_tmp.txt
)
for /f "delims=" %%i in (pe_add.txt) do (
if exist "X:%%i" echo X:%%i>>pe_tmp.txt
)


title 第二阶段生成wimlib列表文件...
for /f "tokens=1,2 delims=:" %%a in (pe_tmp.txt) do (
echo add "%%b" "%%b">>pe_excel.txt
)
title 第三阶段把文件添加到wim
%wimlib% update mini.wim<pe_excel.txt搜索
复制


最后多了步骤,但很高效

点评

效率在于减少dir的次数,说明a.txt里不带星的多,  详情 回复 发表于 2022-4-10 14:31
回复

使用道具 举报

20#
发表于 2022-4-10 14:31:19 | 只看该作者
江南一根葱 发表于 2022-4-10 11:15
del /s /f pe_*.txt
find "\" mini\%pelist%>pe_list.txt
type pe_list.txt|findstr /v /m "*">pe_ad ...

效率在于减少dir的次数,说明a.txt里不带星的多,
回复

使用道具 举报

21#
发表于 2022-4-13 08:43:17 | 只看该作者
可以生成一个实际文件列表.
再用 for 从中进行 findstr 操作, findstr支持部分通配符.
回复

使用道具 举报

22#
发表于 2022-9-27 23:19:22 | 只看该作者
666
回复

使用道具 举报

23#
发表于 2022-10-5 20:19:43 | 只看该作者

葱牛出品必是精品。威武
回复

使用道具 举报

24#
发表于 2023-3-23 21:32:02 | 只看该作者
葱牛出品必是精品
回复

使用道具 举报

25#
发表于 2023-3-24 23:40:56 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

26#
发表于 2023-5-2 21:55:38 | 只看该作者

谢谢分享
回复

使用道具 举报

27#
发表于 2023-5-23 22:01:06 | 只看该作者
谢谢分享
回复

使用道具 举报

28#
发表于 2023-10-27 06:15:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-26 02:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表