Board logo

标题: [文件操作] 批处理含多级子文件夹内的指定格式文件复制到新文件夹 [打印本页]

作者: 001011    时间: 2023-11-14 01:30     标题: 批处理含多级子文件夹内的指定格式文件复制到新文件夹

本帖最后由 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
复制代码

作者: qixiaobin0715    时间: 2023-11-14 08:20

本帖最后由 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文件夹下的文件还需要增加几行代码。
作者: 001011    时间: 2023-11-14 09:47

回复 2# qixiaobin0715
提示  找不到文件啊
作者: qixiaobin0715    时间: 2023-11-14 09:54

回复 3# 001011
说明某些文件夹中不存在xls文件,加个判断,已修改。
作者: Five66    时间: 2023-11-14 10:11

组合分隔符默认为英文下划线(即_),因此文件名和文件路径不要有英文下划线(即_),不然还原会出错,组合而成的文件名过长时也会出错

复制
  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
复制代码

作者: 001011    时间: 2023-11-14 10:23

本帖最后由 001011 于 2023-11-14 10:33 编辑

回复 4# qixiaobin0715
OK  OK  感谢 感谢
作者: qixiaobin0715    时间: 2023-11-14 13:01

回复 6# 001011
pushd后面成空白,忘记加路径了,已修改。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2