windows - Batch For 循环使用多个问号作为通配符返回不正确的文件
问题描述
我试图让一个批处理脚本遍历文件夹中特定类型的文件名。我不希望它接触超过一定长度或格式的类似名称的文件。每次运行时,脚本都会返回太多与文件名结构不匹配的文件
文件夹中的文件:
ABC_4567.JPG
ABC_DoNotWantThisFileToBeProcessed_NoThanks_4876.JPG
试过1:
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (ABC_????.JPG) do (
ECHO Processing file: %%~nxf
)
试过2:
@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (????????.JPG) do (
ECHO Processing file: %%~nxf
)
返回这个:
Processing file: ABC_4567.JPG
Processing file: ABC_DoNotWantThisFileToBeProcessed_NoThanks_4876.JPG
我该如何解决这个问题并只返回长度较短或结构为ABC_####.JPG的文件
谢谢你救了我的头发。
解决方案
有一种更简单的方法,那就是使用内置的where.exe
实用程序。此实用程序理解?
为一个字符,并且它也不包含 8.3 文件名。
此示例将迭代当前目录"."
,文件名以不区分大小写的字符串开头ABC_
,后跟正好四个字符,后跟不区分大小写的扩展名.JPG
。
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In ('
"(Set PATHEXT=) & where.exe /F ".":"ABC_????.JPG" 2>NUL"
') Do Echo Processing file: %%G
Pause
如果您打算在您的循环Do
部分中使用延迟扩展For
,请考虑仅在此处启用它,而不是为整个脚本启用它。
推荐阅读
- boto3 - client.create_hours_of_operation 失败并出现 AttributeError:“Connect”对象没有属性“create_hours_of_operation”
- vscode-settings - VS 代码扩展 | 如果在父目录的子目录中,您只能显示命令吗?
- grails - 当一个字段中的某些值充当约束时,如何使用自定义验证器添加 grails 约束?
- javascript - 传单点击性能差
- sql - 如何在时间序列数据上每周识别新添加的主键
- node.js - 如何在 MongoDB 中使用聚合框架来查找每小时、每天、每周、每年的温度数据?
- material-ui - React Hook Form + Material UI Datepickers 和 Luxon 输出格式
- keyboard - 键盘映射;从 MacBook 到 Fusion 到 RDP 的 CTRL-C 和 CTRL-V
- python - 在python中逐行比较两个文件的想法
- jenkins - 如何为上传到 Jfrog Artifactory 的每个工件触发 Jenkins 管道构建