批处理中如何通过For循环递增盘符字母遍历检测目标程序并复制文件
批处理遍历盘符实现需求的方案
当然可以实现,下面提供两种常用实现方式:
方案1:遍历D到Z所有盘符
写法最简单,不需要额外系统命令,直接循环所有可能的盘符判断即可:
@echo off :: 提前设置要复制的txt文件前缀/全名 set "FileName=你的目标文件名" :: 循环遍历D到Z所有盘符 for %%i in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( :: 判断当前盘符根目录是否存在指定程序 if exist "%%i:\Test.exe" ( :: 复制文件到该盘符根目录,静默输出 copy "%FileName%.txt" "%%i:\" >nul :: 找到第一个符合条件的盘符就停止,不需要可删除下一行 goto :endLoop ) ) :endLoop
方案2:仅遍历可移动磁盘(更精准)
直接通过系统接口读取所有U盘/移动磁盘盘符,不会扫描本地硬盘,效率更高,误操作风险更低:
@echo off setlocal enabledelayedexpansion :: 提前设置要复制的txt文件前缀/全名 set "FileName=你的目标文件名" :: wmic查询所有可移动磁盘(drivetype=2对应可移动磁盘类型) for /f "skip=1 delims=:" %%a in ('wmic logicaldisk where drivetype^=2 get deviceid') do ( set "driveLetter=%%a" :: 过滤空行和异常输出后做判断 if not "!driveLetter!"=="" if exist "!driveLetter!:\Test.exe" ( copy "%FileName%.txt" "!driveLetter!:\" >nul :: 找到第一个符合条件的盘符就停止,不需要可删除下一行 goto :endLoop ) ) :endLoop endlocal
注意事项
- 两种方案里的
Test.exe可以替换为你实际要检测的程序路径,如果程序不在盘符根目录需要补全对应路径 - 不需要静默复制效果的话,删掉
copy命令末尾的>nul即可 - 如果要给所有符合条件的U盘都复制文件,删除对应代码里的
goto :endLoop行即可
内容的提问来源于stack exchange,提问作者Boogershut
相关产品推荐
相关产品推荐

