关于在批处理脚本中使用xcopy时指定单个或多个文件扩展名的咨询
关于在批处理脚本中使用xcopy时指定单个或多个文件扩展名的咨询
嘿,我看你写了个批处理脚本,核心是要根据当前目录下.bat文件的前缀匹配对应文件夹,再用xcopy复制指定内容对吧?正好帮你梳理下脚本里关于指定文件扩展名的写法问题,还有一些可以优化的地方。
首先理清楚你的需求逻辑:
- 遍历当前目录下所有
.bat文件 - 把每个文件名按下划线
_拆分,取第一部分作为目标文件夹的核心名称 - 从E盘对应路径复制内容到G盘带
spi-前缀的目标文件夹里
原脚本里的小问题
你脚本里第二个xcopy的写法"E:\folder1\folder2\!folname![/b]\folder3\"是语法错误哦,这应该是你想指定文件类型时写错了。咱们得明确xcopy指定单个/多个扩展名的正确方式:
指定单个/多个文件扩展名的正确写法
- 单个扩展名:比如只复制JPG文件,直接在路径末尾加
*.扩展名即可:xcopy /Y "E:\folder1\folder2\!folname!\folder3\*.jpg" "G:\folder1\folder2\spi-!folname!\folder3\" - 多个扩展名:如果要同时复制JPG、TIFF、EPS这类文件,用分号
;分隔不同的通配符:xcopy /Y "E:\folder1\folder2\!folname!\folder3\*.jpg;*.tiff;*.eps" "G:\folder1\folder2\spi-!folname!\folder3\" - 包含子文件夹复制:如果连子文件夹里的指定类型文件也要一起复制,加上
/E参数(会复制空文件夹),或者/S参数(不复制空文件夹):xcopy /E /Y "E:\folder1\folder2\!folname!\folder3\*.jpg;*.tiff;*.eps" "G:\folder1\folder2\spi-!folname!\folder3\"
修正后的完整脚本
我把你的脚本调整了下,修正了语法错误,同时保留核心逻辑:
@echo off setlocal enabledelayedexpansion for %%A in (*.bat) do ( for /f "delims=" %%B in ("%%A") do set fname=%%~nB for /f "delims=" %%C in ("%%A") do set fextn=%%~xC for /f "tokens=1* delims=_" %%D in ("!fname!") do set folname=%%D echo 文件夹名称: !folname! echo. :: 复制指定单个扩展名的文件(示例:JPG) xcopy /Y "E:\folder1\folder2\!folname!\folder3\*.jpg" "G:\folder1\folder2\spi-!folname!\folder3\" :: 复制指定多个扩展名的文件(示例:JPG、TIFF、EPS) xcopy /Y "E:\folder1\folder2\!folname!\folder3\*.jpg;*.tiff;*.eps" "G:\folder1\folder2\spi-!folname!\folder3\" :: 复制包含子文件夹的指定类型文件 xcopy /E /Y "E:\folder1\folder2\!folname!\folder3\*.jpg;*.tiff;*.eps" "G:\folder1\folder2\spi-!folname!\folder3\" ) echo 处理完成! pause
小提示
xcopy的/Y参数是覆盖目标文件时不提示,如果你需要确认覆盖,可以去掉这个参数- 如果要排除某些文件类型,
xcopy本身没有直接排除的参数,可能需要结合findstr来过滤,不过你的需求里应该用不上这个
备注:内容来源于stack exchange,提问作者user1881
相关产品推荐
相关产品推荐

