Windows批处理如何实现交互输入扩展名后搜索文件复制到指定目录
解决方案
这个需求完全可以实现,仅靠Windows批处理原生语法就能完成,不需要额外工具。
核心改动逻辑
- 用批处理原生的
set /p命令实现交互输入,运行时提示用户输入要搜索的文件扩展名,同时增加空输入校验,避免用户直接回车导致脚本运行异常 - 替换原脚本硬编码的
mama.jpg匹配规则,直接用dir命令的通配符筛选对应后缀的文件,比原脚本用管道+find的匹配方式效率更高,也不会出现文件名包含关键词就被误匹配的问题 - 把目标存储文件夹的创建判断移到循环外部,不需要每找到一个文件就重复判断一次文件夹是否存在,减少冗余操作
- 统一路径分隔符为Windows原生反斜杠,补全xcopy目标路径末尾的分隔符,避免xcopy弹出“目标是文件还是目录”的冗余提示
可直接运行的修改后代码
@echo off chcp 65001 >nul set "destination=%CD%" set "target_ext=" :: 接收用户输入的扩展名 :input_retry set /p "target_ext=请输入要搜索的目标文件扩展名(如png、cr2、jpg,无需输入前缀点号):" if not defined target_ext ( echo 输入不可为空,请重新输入 goto input_retry ) :: 自动兼容用户误输入的点号前缀 if "%target_ext:~0,1%"=="." set "target_ext=%target_ext:~1%" :: 提前创建存储复制文件的目标文件夹 if not exist "%destination%\Skopiowane_zdjecia" md "%destination%\Skopiowane_zdjecia" :: 递归遍历所有匹配后缀的文件并复制 for /f "delims=" %%a in ('dir /b /s "*.%target_ext%"') do ( xcopy /y "%%a" "%destination%\Skopiowane_zdjecia\" ) echo 所有.%target_ext%格式文件已复制完成,按任意键退出 pause >nul
使用注意事项
- 把脚本放在要搜索的根目录下双击运行即可,按照提示输入对应扩展名回车就会自动执行搜索复制
- 脚本会自动递归遍历当前目录下所有层级的子文件夹,把匹配后缀的文件全部复制到同目录下的
Skopiowane_zdjecia文件夹中 - 如果输入扩展名时不小心带了前缀点号(比如输入
.png),脚本会自动做格式修正,不会出现匹配错误
内容的提问来源于stack exchange,提问作者Jack Godorowski
相关产品推荐
相关产品推荐

