[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
复制代码
非常好的论坛

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

TOP

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

回复 4# qixiaobin0715
OK  OK  感谢 感谢
非常好的论坛

TOP

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

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

TOP

回复 3# 001011
说明某些文件夹中不存在xls文件,加个判断,已修改。

TOP

回复 2# qixiaobin0715
提示  找不到文件啊
非常好的论坛

TOP

本帖最后由 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文件夹下的文件还需要增加几行代码。

TOP

返回列表