bat 脚本提取出指定目录中包含test的所有文件
在Windows批处理(.bat)脚本中,直接进行不区分大小写的字符串比较是比较困难的,因为Windows的命令行环境默认是区分大小写的。但是,你可以通过一些技巧来实现这个功能,比如使用for
循环结合dir
命令和findstr
命令(尽管findstr
本身也是区分大小写的,但我们可以利用它来处理文件名的一部分),或者通过调用外部工具如PowerShell。
不过,对于简单地提取包含特定字符串(不区分大小写)的文件名,我们可以使用where
命令(在Windows Vista及更高版本的Windows中可用),它支持不区分大小写的搜索。但是,where
命令本身并不直接支持在文件名中进行模式匹配,所以我们通常会用它来搜索文件内容。为了搜索文件名,我们需要结合其他方法,比如使用dir
然后通过findstr
过滤(尽管这不是真正的不区分大小写文件名搜索)。
然而,为了真正实现不区分大小写的文件名搜索,我们可以使用PowerShell脚本,然后通过批处理文件调用它。以下是一个示例,展示了如何在批处理文件中调用PowerShell脚本来提取包含"test"(不区分大小写)的文件名:
@echo off
setlocal
set "searchDir=C:\path\to\your\directory"
set "searchString=test"
for /f "delims=" %%i in ('powershell -command "Get-ChildItem -Path '%searchDir%' -Recurse -File | Where-Object { $_.Name -imatch '%searchString%' } | Select-Object -ExpandProperty FullName"') do (
echo %%i
)
endlocal
pause
在这个脚本中:
searchDir
是你要搜索的目录。searchString
是你要搜索的字符串(在这个例子中是"test")。powershell -command "..."
部分调用了PowerShell脚本,该脚本使用Get-ChildItem
(别名ls
或dir
)递归地搜索目录中的文件,并使用Where-Object
过滤出文件名匹配(不区分大小写,由-imatch
参数指定)的文件。然后,它使用Select-Object -ExpandProperty FullName
来获取这些文件的完整路径。for /f "delims=" %%i in ('...') do (...)
循环遍历PowerShell命令的输出,并将每个文件名打印到控制台。
请注意,这个脚本假设你的系统上已经安装了PowerShell,并且你的批处理文件有足够的权限来调用它。此外,由于PowerShell脚本是在单引号内执行的,因此你需要确保路径和字符串中没有单引号,或者对它们进行适当的转义。
如果你不能使用PowerShell,并且你的需求仅限于简单的文件名匹配(不考虑子目录),你可能需要编写一个更复杂的批处理脚本,该脚本会遍历目录中的每个文件,并使用findstr /i
(尽管findstr
是用于搜索文件内容的,但你可以通过一些技巧来模拟文件名搜索,比如将文件名写入临时文件然后搜索这些文件)。然而,这种方法既笨拙又效率低下,因此通常建议使用PowerShell或其他更强大的脚本语言来处理这种任务。
- 点赞
- 收藏
- 关注作者
评论(0)