标题: [文件操作] 求助批量创建文件夹移动文件的批处理怎样写才更简洁?[已解决] [打印本页]
作者: semiuel 时间: 2021-9-28 10:30 标题: 求助批量创建文件夹移动文件的批处理怎样写才更简洁?[已解决]
本帖最后由 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
我自己写了一个批处理,但水平有限,写得非常繁琐。- @echo off
- setlocal enabledelayedexpansion
- set file1=出库清单
- set file2=库存清单
- set file3=入库清单
- set file4=入库统表
- set file5=应付账款
- if not exist "%file1%".xls goto error1
- if not exist "%file2%".xls goto error1
- if not exist "%file3%".xls goto error1
- if not exist "%file4%".xls goto error1
- if not exist "%file5%".xls goto error1
-
- :begin
- cls
- set /p year=请输入年份:
- if "%year%"=="" goto begin
- set /a a=1/(%year%1) 2>nul && cls || goto begin
- if %year% lss 2020 goto begin
- if %year% gtr 2100 goto begin
- if exist E:\%year%\ goto error2
- MD E:\%year%\%year%.01
- COPY "%file1%.xls" "E:\%year%\%year%.01\%file1%%year%.01.xls"
- COPY "%file2%.xls" "E:\%year%\%year%.01\%file2%%year%.01.xls"
- COPY "%file3%.xls" "E:\%year%\%year%.01\%file3%%year%.01.xls"
- COPY "%file4%.xls" "E:\%year%\%year%.01\%file4%%year%.01.xls"
- COPY "%file5%.xls" "E:\%year%\%year%.01\%file5%%year%.01.xls"
- goto end
-
- :error1
- echo 缺少文件。
- goto end
-
- :error2
- echo 已存在该年份文件。
- goto end
-
- :end
- pause >nul
复制代码
盼大神们帮忙看看。
作者: semiuel 时间: 2021-9-28 10:32
也想过写成for语句,但实在水平不行,没能写成。
作者: qixiaobin0715 时间: 2021-9-28 10:53
假设xls文件在D:\abc文件夹中。未测试:- @echo off
- set "Folder=D:\abc"
- md "E:\2022"
- cd /d "E:\2022"
- for /l %%a in (202201,1,202212) do (
- md "%%a"
- for %%i in ("%Folder%\*.xls") do copy "%%i" "%%~ni%%a.xls"
- )
- pause
复制代码
作者: Batcher 时间: 2021-9-28 11:20
回复 1# semiuel - @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set "file1=出库清单.xls"
- set "file2=库存清单.xls"
- set "file3=入库清单.xls"
- set "file4=入库统表.xls"
- set "file5=应付账款.xls"
- for %%i in ("%file1%" "%file2%" "%file3%" "%file4%" "%file5%") do (
- if not exist %%i (
- goto :error1
- )
- )
-
- :begin
- cls
- set /p year=请输入年份:
- if "%year%" equ "" goto :begin
- if %year% lss 2020 (
- goto :begin
- ) else if %year% gtr 2100 (
- goto :begin
- )
- set "NewFolder=E:\%year%"
- if exist "%NewFolder%" (
- goto :error2
- ) else (
- md "%NewFolder%"
- )
- for /l %%a in (101,1,112) do (
- set "month=%%a"
- set "month=!month:~1!"
- md "%NewFolder%\%year%.!month!"
- for %%i in ("%file1%" "%file2%" "%file3%" "%file4%" "%file5%") do (
- copy /y %%i "%NewFolder%\%year%.!month!\%%~ni%year%.!month!%%~xi"
- )
- )
- goto :end
-
- :error1
- echo 缺少文件。
- goto :end
-
- :error2
- echo 已存在该年份文件。
- goto :end
-
- :end
- pause
复制代码
作者: semiuel 时间: 2021-9-28 11:22
回复 3# qixiaobin0715
感谢大神,稍微修改了一下,把文件放到子目录里。- @echo off
- set "Folder=D:\abc"
- md "E:\2022"
- cd /d "E:\2022"
- for /l %%a in (202201,1,202212) do (
- md "%%a"
- for %%i in ("%Folder%\*.xls") do copy "%%i" "%%a\%%~ni%%a.xls"
- )
- pause
复制代码
美中不足的是年份和月份中间没有小数点。
2022.01 202201
作者: semiuel 时间: 2021-9-28 11:25
回复 4# Batcher
感谢大神,试着运行了一下,相当完美。
作者: taofan712 时间: 2021-9-28 11:55
- @echo off
- setlocal enabledelayedexpansion
- set xls1=出库清单.xls
- set xls2=库存清单.xls
- set xls3=入库清单.xls
- set xls4=入库统表.xls
- set xls5=应付账款.xls
- set /p year=输入年份
- md E:\%year%
- for /l %%a in (101 1 112) do (
- set n=%%a
- set n=!n:~1!
- set subdir=%year%.!n!
- for %%i in (%xls1% %xls2% %xls3% %xls4% %xls5%) do echo f|xcopy /q %%i E:\%year%\!subdir!\%%~ni!subdir!%%~xi
- )
- pause
复制代码
作者: semiuel 时间: 2021-9-28 12:06
回复 7# taofan712
感谢大神,由于用了xcopy需要输入一个f,所以运行稍慢
运行结果完美。
作者: qixiaobin0715 时间: 2021-9-28 12:09
回复 5# semiuel
忘记加路径了。想带点号,稍微麻烦点:- @echo off
- set "Folder=D:\abc"
- md "E:\2022"
- cd /d "E:\2022"
- setlocal enabledelayedexpansion
- for /l %%a in (202201,1,202212) do (
- set str=%%a
- set str=!str:~,4!.!str:~4!
- md "!str!"
- for %%i in ("%Folder%\*.xls") do copy "%%i" "!str!\%%~ni!str!.xls"
- )
- pause
复制代码
作者: semiuel 时间: 2021-9-28 12:12
回复 9# qixiaobin0715
谢谢关注,收获了3个完美的批处理。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |