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

[文件操作] 求助批量创建文件夹移动文件的批处理怎样写才更简洁?[已解决]

本帖最后由 semiuel 于 2021-9-28 11:32 编辑

目前有这样一个需求,想通过批处理来完成:
有5个XLS文件分别为:出库清单.xls   库存清单.xls   入库清单.xls   入库统表.xls   应付账款.xls
想要实现这样的功能:
输入一个年份2022,在E盘创建2022这个目录,然后创建12个子目录分别为2022.01-2022.12
然后把上面5个XLS文件分别复制到每个目录,并改名为类似这样的文件名:出库清单2022.01.xls   库存清单2022.01.xls   入库清单2022.01.xls   入库统表2022.01.xls   应付账款2022.01.xls

目录结构如下:
E:\2022
└─2022.01
        入库清单2022.01.xls
        入库统表2022.01.xls
        出库清单2022.01.xls
        库存清单2022.01.xls
        应付账款2022.01.xls
└─2022.02
        入库清单2022.02.xls
        入库统表2022.02.xls
        出库清单2022.02.xls
        库存清单2022.02.xls
        应付账款2022.02.xls
。。。。。。。。。

└─2022.12
        入库清单2022.12.xls
        入库统表2022.12.xls
        出库清单2022.12.xls
        库存清单2022.12.xls
        应付账款2022.12.xls

我自己写了一个批处理,但水平有限,写得非常繁琐。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set file1=出库清单
  4. set file2=库存清单
  5. set file3=入库清单
  6. set file4=入库统表
  7. set file5=应付账款
  8. if not exist "%file1%".xls goto error1
  9. if not exist "%file2%".xls goto error1
  10. if not exist "%file3%".xls goto error1
  11. if not exist "%file4%".xls goto error1
  12. if not exist "%file5%".xls goto error1
  13. :begin
  14. cls
  15. set /p year=请输入年份:
  16. if "%year%"=="" goto begin
  17. set /a a=1/(%year%1) 2>nul && cls || goto begin
  18. if %year% lss 2020 goto begin
  19. if %year% gtr 2100 goto begin
  20. if exist E:\%year%\ goto error2
  21. MD E:\%year%\%year%.01
  22. COPY "%file1%.xls" "E:\%year%\%year%.01\%file1%%year%.01.xls"
  23. COPY "%file2%.xls" "E:\%year%\%year%.01\%file2%%year%.01.xls"
  24. COPY "%file3%.xls" "E:\%year%\%year%.01\%file3%%year%.01.xls"
  25. COPY "%file4%.xls" "E:\%year%\%year%.01\%file4%%year%.01.xls"
  26. COPY "%file5%.xls" "E:\%year%\%year%.01\%file5%%year%.01.xls"
  27. goto end
  28. :error1
  29. echo 缺少文件。
  30. goto end
  31. :error2
  32. echo 已存在该年份文件。
  33. goto end
  34. :end
  35. pause >nul
复制代码
盼大神们帮忙看看。

也想过写成for语句,但实在水平不行,没能写成。

TOP

假设xls文件在D:\abc文件夹中。未测试:
  1. @echo off
  2. set "Folder=D:\abc"
  3. md "E:\2022"
  4. cd /d "E:\2022"
  5. for /l %%a in (202201,1,202212) do (
  6.     md "%%a"
  7.     for %%i in ("%Folder%\*.xls") do copy "%%i" "%%~ni%%a.xls"
  8. )
  9. pause
复制代码

TOP

回复 1# semiuel
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set "file1=出库清单.xls"
  5. set "file2=库存清单.xls"
  6. set "file3=入库清单.xls"
  7. set "file4=入库统表.xls"
  8. set "file5=应付账款.xls"
  9. for %%i in ("%file1%" "%file2%" "%file3%" "%file4%" "%file5%") do (
  10.     if not exist %%i (
  11.         goto :error1
  12.     )
  13. )
  14. :begin
  15. cls
  16. set /p year=请输入年份:
  17. if "%year%" equ "" goto :begin
  18. if %year% lss 2020 (
  19.     goto :begin
  20. ) else if %year% gtr 2100 (
  21.     goto :begin
  22. )
  23. set "NewFolder=E:\%year%"
  24. if exist "%NewFolder%" (
  25.     goto :error2
  26. ) else (
  27.     md "%NewFolder%"
  28. )
  29. for /l %%a in (101,1,112) do (
  30.     set "month=%%a"
  31.     set "month=!month:~1!"
  32.     md "%NewFolder%\%year%.!month!"
  33.     for %%i in ("%file1%" "%file2%" "%file3%" "%file4%" "%file5%") do (
  34.         copy /y %%i "%NewFolder%\%year%.!month!\%%~ni%year%.!month!%%~xi"
  35.     )
  36. )
  37. goto :end
  38. :error1
  39. echo 缺少文件。
  40. goto :end
  41. :error2
  42. echo 已存在该年份文件。
  43. goto :end
  44. :end
  45. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# qixiaobin0715


    感谢大神,稍微修改了一下,把文件放到子目录里。
  1. @echo off
  2. set "Folder=D:\abc"
  3. md "E:\2022"
  4. cd /d "E:\2022"
  5. for /l %%a in (202201,1,202212) do (
  6.     md "%%a"
  7.     for %%i in ("%Folder%\*.xls") do copy "%%i" "%%a\%%~ni%%a.xls"
  8. )
  9. pause
复制代码
美中不足的是年份和月份中间没有小数点。
2022.01      202201

TOP

回复 4# Batcher


    感谢大神,试着运行了一下,相当完美。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set xls1=出库清单.xls
  4. set xls2=库存清单.xls
  5. set xls3=入库清单.xls
  6. set xls4=入库统表.xls
  7. set xls5=应付账款.xls
  8. set /p year=输入年份
  9. md E:\%year%
  10. for /l %%a in (101 1 112) do (
  11. set n=%%a
  12. set n=!n:~1!
  13. set subdir=%year%.!n!
  14. for %%i in (%xls1% %xls2% %xls3% %xls4% %xls5%) do  echo f|xcopy /q %%i E:\%year%\!subdir!\%%~ni!subdir!%%~xi
  15. )
  16. pause
复制代码

TOP

回复 7# taofan712


    感谢大神,由于用了xcopy需要输入一个f,所以运行稍慢
    运行结果完美。

TOP

回复 5# semiuel
忘记加路径了。想带点号,稍微麻烦点:
  1. @echo off
  2. set "Folder=D:\abc"
  3. md "E:\2022"
  4. cd /d "E:\2022"
  5. setlocal enabledelayedexpansion
  6. for /l %%a in (202201,1,202212) do (
  7.     set str=%%a
  8.     set str=!str:~,4!.!str:~4!
  9.     md "!str!"
  10.     for %%i in ("%Folder%\*.xls") do copy "%%i" "!str!\%%~ni!str!.xls"
  11. )
  12. pause
复制代码

TOP

回复 9# qixiaobin0715


    谢谢关注,收获了3个完美的批处理。

TOP

返回列表