bat 脚本提取出指定目录中包含test的所有文件

举报
福州司马懿 发表于 2024/11/25 17:49:54 2024/11/25
【摘要】 在Windows批处理(.bat)脚本中,直接进行不区分大小写的字符串比较是比较困难的,因为Windows的命令行环境默认是区分大小写的。但是,你可以通过一些技巧来实现这个功能,比如使用for循环结合dir命令和findstr命令(尽管findstr本身也是区分大小写的,但我们可以利用它来处理文件名的一部分),或者通过调用外部工具如PowerShell。不过,对于简单地提取包含特定字符串(不...

在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(别名lsdir)递归地搜索目录中的文件,并使用Where-Object过滤出文件名匹配(不区分大小写,由-imatch参数指定)的文件。然后,它使用Select-Object -ExpandProperty FullName来获取这些文件的完整路径。
  • for /f "delims=" %%i in ('...') do (...) 循环遍历PowerShell命令的输出,并将每个文件名打印到控制台。

请注意,这个脚本假设你的系统上已经安装了PowerShell,并且你的批处理文件有足够的权限来调用它。此外,由于PowerShell脚本是在单引号内执行的,因此你需要确保路径和字符串中没有单引号,或者对它们进行适当的转义。

如果你不能使用PowerShell,并且你的需求仅限于简单的文件名匹配(不考虑子目录),你可能需要编写一个更复杂的批处理脚本,该脚本会遍历目录中的每个文件,并使用findstr /i(尽管findstr是用于搜索文件内容的,但你可以通过一些技巧来模拟文件名搜索,比如将文件名写入临时文件然后搜索这些文件)。然而,这种方法既笨拙又效率低下,因此通常建议使用PowerShell或其他更强大的脚本语言来处理这种任务。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。