如何在bat中获取特定路径下的lib文件列表?

Posted

技术标签:

【中文标题】如何在bat中获取特定路径下的lib文件列表?【英文标题】:How to get lib files list under specific path in bat? 【发布时间】:2021-10-14 17:40:31 【问题描述】:

这是我的 bat 文件:

setlocal EnableDelayedExpansion
set DebugLibNames=
for /f "delims=" %%a in ('"dir /s/b *.lib ..\3rdlib\Debug\ 2>nul"') do (
    set DebugLibNames=%%DebugLibNames%%, %%a
)

echo DebugLibNames:%DebugLibNames%

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
lib.exe /OUT:world.lib %DebugLibNames%

pause

我想要的是获取一个 lib 文件名列表,然后用 lib.exe 将它们打包到一个大 lib 中。

但是,DebugLibNames 是空的,我该如何解决?

【问题讨论】:

将行 set DebugLibNames=%%DebugLibNames%%, %%a 替换为 set DebugLibNames=!DebugLibNames!, %%a... 还要注意命令行长度有限制,因此您需要注意目录树的深度和其中的 lib 文件数量。 【参考方案1】:

这未经测试,但似乎可能有效或接近。 :-)

powershell -NoLogo -NoProfile -File 'Do-It.ps1'

=== Do-It.ps1

$DebugLibNames = Get-ChidItem -Path @('.', '..\3rdlib\Debug') -Filter '*.lib' -ErrorAction SilentlyContinue
Write-Host "DebugLibNames:$($DebugLibNames -join ', ')"
& "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
& lib.exe /OUT:world.lib $($DebugLibNames -join ', ')"

pause

【讨论】:

以上是关于如何在bat中获取特定路径下的lib文件列表?的主要内容,如果未能解决你的问题,请参考以下文章

VC++ 获取文件名?求高手解答

cmd中bat遍历文件夹下所有文件,并进行特定操作

如何用bat打开本身目录下的文件?

如何获取目录下的文件数(一行Python)

cmd 运行批处理,路径中有括号不识别怎么办

如何获取给定文件夹中具有特定扩展名的文件列表?