目录
代码:
问题说明:
要查找某目录下(包含子文件内)所有指定类型的文件(通配符指定),对其进行Move或Copy
一般可以直接搜索关键词,列出指定文件,执行Move/Copy。
でも、若是所有文件的名字是一样的,会因为名字重复,无法 Move/Copy 到同一目录下;或者,指定文件所在文件夹名有意义,需要以之重命名。
尝试用批处理解决:
图例:
处理后:
要点提示:
- for /r 目录树下指定文件遍历
- "%%~pi" 取文件路径,得到所在子目录名
- 用延时变量!PathName:~28,-1!截取路径名 / setlocal EnableDelayedExpansion
- 有关截取字符等 参考:笔记速查:批处理基础知识
代码:
@echo off
setlocal EnableDelayedExpansion
REM 设置延时变量,因为用的了路径名截取赋值
echo 搜索目录 > 目录.txt
REM echo 取文件路径 > 路径.txt
REM 覆盖写入
set Path1="D:\Study\计网\上机课Word2"
md %Path1%
REM md D:\Study\计网\上机课Word
REM 如果没该目录则新建
for /r D:\Study\计网\计网复习\上机作业 %%i in (岳耀洋.docx) do (
REM for /r 目录 %%i in (通配符指代文件名) do (
if exist %%i (
echo "%%i" >> 目录.txt
REM 添加写入
set PathName=%%~pi
REM echo !PathName!
set PathName2=!PathName:~20,-1!
REM 截取路径名,得到所在子目录名
echo 截取后:!PathName2!
echo !PathName2! >> 目录.txt
REM pause>nul
REM 确认无误,注释上句,开启copy或move
REM copy /y %%i %Path1%\!PathName2!.docx
REM move /y %%i %Path1%\!PathName2!.docx
REM /y 参数,不提问直接覆盖
echo 完成当前项,按任意键继续:
pause>nul
REM 注释上两句,批量处理
))
REM for循环的和if的 右括号
pause
type 目录.txt
REM 输出搜索目录
pause