找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21285|回复: 6

[文件操作] 批处理含多级子文件夹内的指定格式文件复制到新文件夹

[复制链接]
发表于 2023-11-14 01:30:54 | 显示全部楼层 |阅读模式
本帖最后由 001011 于 2023-11-14 01:41 编辑

批处理含多级子文件夹内的指定格式(.xls)文件复制到新文件夹,文件名为原文件路径和原文件名的组合
放到新文件夹后 对文件经过处理后   再按照原路径还原回去(覆盖)
这段只能复制一层文件夹  不能多级子文件夹
复制
  1. @echo off
  2. set "src=E:\A"
  3. set "dst=E:\B"
  4. for /f "delims=" %%a in ('dir /b /ad "%src%"') do (
  5.     for %%b in ("%src%\%%a\*.xls") do (
  6.         copy "%%b" "%dst%\%%a_%%~nxb"
  7.     )
  8. )
  9. pause
复制代码
还原
  1. @echo off
  2. set "src=E:\B"
  3. set "dst=E:\A"
  4. for /f "tokens=1-2 delims=_" %%a in ('dir /b "%dst%\*.xls"') do (
  5.     copy "%dst%\%%a_%%b" "%src%\%%a\%%b"
  6. )
  7. pause
复制代码
发表于 2023-11-14 08:20:27 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-11-14 12:02 编辑
  1. @echo off
  2. set "src=E:\A"
  3. set "dst=E:\B"
  4. cd "%src%"
  5. for /f "delims=" %%a in ('dir /s /b /ad') do (
  6.     pushd "%%a"
  7.     if exist *.xls (
  8.         for /f "delims=" %%b in ('dir /b /a-d *.xls') do (
  9.             copy "%%b" "%dst%\%%~nxa_%%b"
  10.         )
  11.     )
  12.     popd
  13. )
  14. pause
复制代码
还原:
  1. @echo off
  2. set "src=E:\A"
  3. set "dst=E:\B"
  4. move "%dst%\*_*.xls" "%src%"
  5. cd "%src%"
  6. for /f "tokens=1* delims=_" %%a in ('dir /b /a-d *_*.xls') do (
  7.     for /f "delims=" %%i in ('dir /b /s /ad "%%a"') do (
  8.         move "%%a_%%b" "%%i"
  9.     )
  10. )
  11. pause
复制代码
未测试,请慎用。
以上代码只会处理子文件夹中的指定格式的文件,如果需要同时处理E:\A文件夹下的文件还需要增加几行代码。
 楼主| 发表于 2023-11-14 09:47:02 | 显示全部楼层
回复 2# qixiaobin0715
提示  找不到文件啊
发表于 2023-11-14 09:54:59 | 显示全部楼层
回复 3# 001011
说明某些文件夹中不存在xls文件,加个判断,已修改。
发表于 2023-11-14 10:11:29 | 显示全部楼层
组合分隔符默认为英文下划线(即_),因此文件名和文件路径不要有英文下划线(即_),不然还原会出错,组合而成的文件名过长时也会出错

复制

  1. @echo off

  2. set "src=E:\A"
  3. set "dst=E:\B"
  4. set s=_

  5. for /r "%src%" %%a in ("*.xls") do (
  6. set file=%%a
  7. setlocal enabledelayedexpansion
  8. set file2=!file:~3!
  9. set file2=!file2:\=%s%!
  10. copy /y "!file!" "!dst!\!file2!"
  11. endlocal
  12. )
  13. pause
复制代码
还原

  1. @echo off

  2. set "src=E:\A"
  3. set "dst=E:\B"
  4. set s=_

  5. for %%a in ("%dst%\*.xls") do (
  6. set file=%%~nxa
  7. setlocal enabledelayedexpansion
  8. set srcd=!src:~0,3!
  9. set srcp=!file:%s%=\!
  10. copy /y "!dst!\!file!" "!srcd!!srcp!"
  11. endlocal
  12. )
  13. pause
复制代码
 楼主| 发表于 2023-11-14 10:23:12 | 显示全部楼层
本帖最后由 001011 于 2023-11-14 10:33 编辑

回复 4# qixiaobin0715
OK  OK  感谢 感谢
发表于 2023-11-14 13:01:17 | 显示全部楼层
回复 6# 001011
pushd后面成空白,忘记加路径了,已修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 10:22 , Processed in 0.018886 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表