标题: [文件操作] 【已解决】BAT脚本怎样成批建立文件夹并复制到新建的文件夹中? [打印本页]
作者: 滴血雄鹰 时间: 2019-1-15 12:42 标题: 【已解决】BAT脚本怎样成批建立文件夹并复制到新建的文件夹中?
本帖最后由 滴血雄鹰 于 2019-1-15 14:56 编辑
成批建立文件夹(指定文件夹开始文件名和建立数量),并复制到新建的文件夹中?求一段代码!
例:
在e:\0000\下成批建立指定文件名的文件夹,并将E:\9999下文件复制到建立的文件夹中。
如:运行bat后,弹出窗口:
1、建立新文件夹,并复制:
2、只建立新文件夹:
输入:1
输入新建文件夹开始文件名:输入100 回车
输入新建文件夹的数量:10 回车
然后就生成从100开始至109的文件名的文件夹。并将文件复制到新建的文件夹中。
输入:2
仅生成从100开始至109的文件名的文件夹。文件不复制。
下面代码可以实现 ,但不能指定开始文件名和新建个数,得手工改代码后,才能实现。- ::步骤:
- ::1、先将文件放入E:\9999下。
- ::2、运行此批处理。
-
- @echo off
- color 0a
- title 批量文件新建中---
- echo ★☆★★☆★☆★☆★☆★☆★
- echo.★ ★
- echo.★ 处 理 中... ★
- echo ★ ★
- echo ★☆★★☆★☆★☆★☆★☆★
- md "e:\0000\001"
- md "e:\0000\002"
- md "e:\0000\003"
- md "e:\0000\004"
- md "e:\0000\005"
- md "e:\0000\006"
- md "e:\0000\007"
- md "e:\0000\008"
- md "e:\0000\009"
- md "e:\0000\010"
- echo 新建文件夹完成!
- ::批量复制文件到新建文件夹中:
- xcopy E:\9999 /q e:\0000\001
- xcopy E:\9999 /q e:\0000\002
- xcopy E:\9999 /q e:\0000\003
- xcopy E:\9999 /q e:\0000\004
- xcopy E:\9999 /q e:\0000\005
- xcopy E:\9999 /q e:\0000\006
- xcopy E:\9999 /q e:\0000\007
- xcopy E:\9999 /q e:\0000\008
- xcopy E:\9999 /q e:\0000\009
- xcopy E:\9999 /q e:\0000\010
复制代码
作者: Batcher 时间: 2019-1-15 13:17
- @echo off
- set /p Begin=输入文件夹开始文件名:
- set /p Num=输入文件夹的数量:
- for /l %%i in (%Begin%,1,%Num%) do (
- md %%i
- xcopy /q E:\9999 e:\0000\%%i
- )
复制代码
作者: 滴血雄鹰 时间: 2019-1-15 13:33
本帖最后由 滴血雄鹰 于 2019-1-15 14:09 编辑
回复 3# yhcfsr
非常感谢!代码有效
能不能在复制后将文件夹内的文件命名为文件夹的名字这段代码加上?另外,代码建立的文件夹多一个,如开始005,建立10个,应该是005-014,实际建到015了。
::将文件夹内的文件命名为文件夹的名字。
@echo off
for /d %%a in (*) do (
for %%b in ("%%~a\*") do (
ren %%b "%%~a%%~xb"
)
)
作者: 滴血雄鹰 时间: 2019-1-15 14:08
回复 2# Batcher
输入:010
文件数:10
实际建立了8-10,3个文件夹。
作者: yhcfsr 时间: 2019-1-15 14:10 标题: 已更新
本帖最后由 yhcfsr 于 2019-1-15 14:50 编辑
回复 4# 滴血雄鹰
需要注意的是:
★起始文件名不要输入005这样以0开头的数字,小于三位数字会自动补0
★不允许创建高于999的文件名
- @echo off
- ::=======用户设置区=======
- set "SrcDir=e:\0000"
- set "DstDir=E:\9999"
- ::========================
- ::=======主程序开始=======
- echo;【1】建新目录并复制
- echo;【2】只建立新文件夹
- choice /N /c 12
- if %errorlevel%==1 call :md_copy
- if %errorlevel%==2 call :only_md
- pause&exit
- ::=======主程序结束=======
-
- ::========函数区=========
- //****建新目录并复制*****
- :md_copy {
- call :only_md
-
- for /l %%a in (%start%,1,%end%) do (
- set "name=%%a"
- for %%b in ("%DstDir%\*") do (
- set "file=%%b"
- setlocal enabledelayedexpansion
- copy "!file!" "!SrcDir!\!name:~-3!\!name:~-3!%%~xb">nul
- endlocal
- )
- )
- exit /b
- }
-
- //****只建立新文件夹****
- :only_md {
- set/p "start=输入新建文件夹开始文件名:"
- set/p "num=输入新建文件夹的数量:"
- set/a "start+=1000"
- set/a "end=start+num-1"
- for /l %%a in (%start%,1,%end%) do (
- set "name=%%a"
- setlocal enabledelayedexpansion
- md "!SrcDir!\!name:~-3!"
- endlocal
- )
- exit /b
- }
复制代码
作者: Batcher 时间: 2019-1-15 14:17
回复 4# 滴血雄鹰
不要输入0开头的数字
作者: 滴血雄鹰 时间: 2019-1-15 14:23
本帖最后由 滴血雄鹰 于 2019-1-15 14:29 编辑
回复 5# yhcfsr
还是你先前的代码,如果再加上一条新建文件后,再删除最后一个文件夹,这样也可以实现,实在不能,我手工删除也无所谓的。也可以我如果要建10个文件夹,就输入9就行了。
因为,我复制的文件有几个,而且文件后缀不是同一类。
作者: yhcfsr 时间: 2019-1-15 14:26
本帖最后由 yhcfsr 于 2019-1-15 14:37 编辑
回复 7# 滴血雄鹰
代码已更新在5楼
作者: 滴血雄鹰 时间: 2019-1-15 15:40
回复 8# yhcfsr
完美解决!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |