标题: [文件操作] [已解决]求助批处理根据清单创建文件夹并复制文件 [打印本页]
作者: feiyan 时间: 2023-6-16 21:27 标题: [已解决]求助批处理根据清单创建文件夹并复制文件
各位老师,我因为工作需要,有个需求是这样的,想根据一个清单(清单内有多个文件名例如 1.pdf, 2.pdf, 3.pdf ,4.pdf,5pdf 6.pdf) 和 多 个文件夹名 A, B, C,
A 1.pdf 2.pdf
B 3.pdf 6.pdf
C 4pdf 5. pdf
1. 在当前目录下(C:\Users\Administrator\Desktop\test1\)创建清单内的多个文件夹。
2. 到指定目录下的文件夹(D:文件数据库)内复制和清单内的文件名的文件到刚创建的文件夹内,需要和清单内容是一一对应,例如:1.pdf,2pdf 复制到 A 文件夹内, 3.pdf 6.pdf 复制在B 文件夹内, 4.pdf ,5pdf 复制到C 文件夹内
3 如果(D:文件数据库)内没有清单内的文件名,(假设: 6.pdf, 5.pdf 是不存在的) 需要创建一个复制不成功清单,包含不成功的文件名。
[img][/img]
作者: jyswjjgdwtdtj 时间: 2023-6-16 21:33
回复 1# feiyan
换个标题啦 一会batcher要过来扣分的
还有要求没看懂
作者: czjt1234 时间: 2023-6-17 09:14
清单长啥样?
A 1.pdf 2.pdf
B 3.pdf
还是
[A]
1.pdf
2.pdf
[B]
3.pdf
作者: Batcher 时间: 2023-6-17 09:46
回复 1# feiyan
请把清单发出来看看,如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 77七 时间: 2023-6-17 19:41
文件夹和文件名是否含有空格?
作者: feiyan 时间: 2023-6-17 19:48
回复 5# 77七
没有空格
作者: feiyan 时间: 2023-6-17 19:51
xi新人刚来,傻傻不懂,标题是有固定的要求和格式吗?
作者: feiyan 时间: 2023-6-17 19:52
已经上传截图了,还把表述不清楚的,重新编辑下
作者: 77七 时间: 2023-6-17 20:04
本帖最后由 77七 于 2023-6-17 20:21 编辑
- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "C:\Users\Administrator\Desktop\test1\"
- for /f "delims=" %%a in ('type "1.txt"') do (
- setlocal enabledelayedexpansion
- for %%b in (%%a) do (
- if defined folder (
- if exist "D:\文件数据库\%%b" (
- copy "D:\文件数据库\%%b" "!folder!"
- ) else (
- >>log.txt echo %%b
- )
- ) else (
- set "folder=%%b"
- md "!folder!"
- )
- )
- endlocal
- )
- pause
复制代码
试试行吗
作者: yakeyun 时间: 2023-6-17 20:05
本帖最后由 yakeyun 于 2023-6-17 20:08 编辑
回复 1# feiyan
未测试,不知道是不是需要的。- @echo off
- setlocal enabledelayedexpansion
- pushd "%~dp0"
-
- for /f "tokens=1-3" %%a in (1.txt) do (
- md "%%a"
- if exist "D:文件数据库\%%b" (
- xcopy "D:文件数据库\%%b" ".\%%a\" /f /y >nul
- ) else (
- echo 找不到指定文档:%%b ,拷贝到文件夹%%a中。 >>错误清单.log
- )
- if exist "D:文件数据库\%%c" (
- xcopy "D:文件数据库\%%c" ".\%%a\" /f /y >nul
- ) else (
- echo 找不到指定文档:%%c ,拷贝到文件夹%%a中。 >>错误清单.log
- )
- )
-
- popd
-
- exit
复制代码
作者: qixiaobin0715 时间: 2023-6-18 09:01
批处理文件放在C:\Users\Administrator\Desktop\test1\目录下,并保存为ANSI编码:- @echo off
- (for /f "tokens=1*" %%i in (1.txt) do (
- md "%%i">nul 2>nul
- for %%k in (%%j) do (
- if exist "D:\文件数据库\%%k" (
- copy "D:\文件数据库\%%k" "%%i\">nul 2>nul
- ) else (
- echo,%%k
- )
- )
- ))>2.txt
- pause
复制代码
作者: feiyan 时间: 2023-6-18 19:44
回复 9# 77七
系统显示找不到指定文件
作者: feiyan 时间: 2023-6-18 19:45
回复 11# qixiaobin0715
显示找不到文件
作者: feiyan 时间: 2023-6-18 19:48
回复 10# yakeyun
双击后无任何反应,我特地检查下,是完全copy 过来的
作者: czjt1234 时间: 2023-6-18 20:40
9 10 11 楼的代码,是假设你的清单文件名为 1.txt,且和批处理文件在一起
作者: feiyan 时间: 2023-6-19 12:08
回复 15# czjt1234
是的,我的1.txt 和这个批处理都在一个文件夹下就是test1 下面
作者: czjt1234 时间: 2023-6-19 15:16
回复 17# feiyan
1.txt和批处理文件是不是都是ANSI编码
作者: feiyan 时间: 2023-6-19 20:58
回复 17# czjt1234
1.txt 不是的
作者: feiyan 时间: 2023-6-19 21:05
回复 9# 77七
感谢,今天测试成功了。,我把1. txt 也设置了ansi 格式。非常感谢。
作者: feiyan 时间: 2023-6-19 21:05
回复 10# yakeyun
感谢,今天测试成功了。,我把1. txt 也设置了ansi 格式。非常感谢。
作者: feiyan 时间: 2023-6-19 21:06
回复 11# qixiaobin0715
感谢,今天测试成功了。,我把1. txt 也设置了ansi 格式。就可把程序跑起来了,非常感谢。
作者: feiyan 时间: 2023-9-25 20:51
回复 11# qixiaobin0715
楼主,我在实际工作中发现我的路径和文件名都是空格的,但是只要是有空格的文件名就无法复制到指定文件夹下,能帮忙更新这个批处理吗?谢谢 ps, 我在1.txt 中,把文件名用双引号引起来,发现没有效果。
作者: feiyan 时间: 2023-9-25 20:52
回复 9# 77七
楼主,我在实际工作中发现我的路径和文件名都是有空格的,但是只要是有空格的文件名就无法复制到指定文件夹下,能帮忙更新这个批处理吗?谢谢 ps, 我在1.txt 中,把文件名用双引号引起来,发现没有效果。
作者: 77七 时间: 2023-9-25 22:16
回复 23# feiyan
- @echo off
- rem 文本格式 "A" "1.pdf" "2.pdf"
- rem 批处理保存为ansi编码格式
- cd /d "C:\Users\Administrator\Desktop\test1\"
- for /f "delims=" %%a in ('type "1.txt"') do (
- setlocal enabledelayedexpansion
- for %%b in (%%a) do (
- if defined folder (
- if exist "D:\文件数据库\%%~b" (
- copy "D:\文件数据库\%%~b" "!folder!"
- ) else (
- >>log.txt echo %%~b
- )
- ) else (
- set "folder=%%~b"
- md "!folder!"
- )
- )
- endlocal
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2023-9-26 10:01
本帖最后由 qixiaobin0715 于 2023-9-26 10:51 编辑
回复 22# feiyan
实际上你才是楼主。
你可以把实际运行错误的几种情况发上来看看:比如路径有空格;文件名有空格...等等。
清单上的分隔符应当统一,如果列出的文件夹名或文件名中存在空格,那么文件夹名或文件名之间的分隔就不能再使用空格分隔了,这样会造成逻辑上的混乱。
清单内的具体格式可以使用24楼中的引号分隔方式为最优。
作者: feiyan 时间: 2023-9-26 20:05
回复 24# 77七 非常感谢,运行成功了。
作者: feiyan 时间: 2023-9-26 20:06
回复 25# qixiaobin0715
受教了
作者: feiyan 时间: 2023-9-27 19:58
各位老师,对于1.txt 中包含的文件名,如果我想偷懒,用1*.pdf, 2*pdf 来代替实际文件名,发现程序就没法复制数据库里面的文件了。这个有办法解决吗?
作者: 77七 时间: 2023-9-27 22:23
回复 28# feiyan
- @echo off
- rem 文本格式 a|1.pdf|2*.pdf
- rem 批处理保存为ansi编码格式
- cd /d "C:\Users\Administrator\Desktop\test1\"
- for /f "tokens=1* delims=|" %%a in ('type "1.txt"') do (
- md "%%a" 2>nul
- set "folder=%%a"
- call :1 "%%b"
- )
- pause & exit
-
- :1
- for /f "tokens=1* delims=|" %%x in ("%~1") do (
- if exist "D:\文件数据库\%%x" (
- copy "D:\文件数据库\%%x" "%folder%"
- ) else (
- >>log.txt echo %%x
- )
- if "%%y" neq "" (
- call :1 "%%y"
- ) else (
- exit /b
- )
- )
复制代码
作者: feiyan 时间: 2023-9-28 18:03
回复 29# 77七 好像不成功,没有文件夹被创建出来,而且系统也没有报错,就提示了一句,请按任意键继续
作者: 77七 时间: 2023-9-28 18:43
回复 30# feiyan
我刚测试了一下,代码正常,1.txt是否是代码中要求的格式?
复制代码
作者: 877 时间: 2023-9-28 19:07
回复 31# 77七
大佬在吗?看一下我的最新帖吧~求助您
作者: feiyan 时间: 2023-9-29 14:01
回复 31# 77七
这个我试了下,不知道为什么,就是1.txt 里面,如果我的文件夹和文件名多一些,第二个文件夹和之后文件夹就没有显示。当我只是个文件夹和单个文件就没有这个问题。
举例:
A|1*|2*|3*|
B|1*|2*|
C|3*|*00*|
这样也不行
A|1*||2*||3*|
B|1*||2*|
C|3*||*00*|
下面这这个模式没问题
A|1*|
B|1*|
C|3*|
作者: 77七 时间: 2023-9-29 15:03
回复 33# feiyan
复制代码
尽量不要修改格式,虽然这样也没错,就怕把代码也随意改了,格式中包括含有空格的文件名等等,不需要加引号了。
上一个代码,我用你的格式,测试也没发现问题,
可以试试点击上一个代码的 copy 按钮 复制代码,不要选中复制。
或者试试以下的
- @echo off
- rem 文本格式 a|1.pdf|2*.pdf
- rem 批处理保存为ansi编码格式
- cd /d "C:\Users\Administrator\Desktop\test1\"
- for /f "tokens=1* delims=|" %%a in ('type "1.txt"') do (
- echo 创建文件夹 "%%a"
- md "%%a" 2>nul
- set "folder=%%a"
- set "str="
- call :1 "%%b"
- echo=
- )
- pause & exit
-
- :1
- if not defined str (
- set "str=%~1"
- )
- for /f "tokens=1* delims=|" %%x in ("%str%") do (
- echo 查找文件 "%%x"
- if exist "D:\文件数据库\%%x" (
- copy "D:\文件数据库\%%x" "%folder%"
- ) else (
- >>log.txt echo %%x
- )
- if "%%y" neq "" (
- set "str=%%y"
- goto :1
- ) else (
- exit /b
- )
- )
复制代码
作者: feiyan 时间: 2023-9-29 16:02
回复 34# 77七 这个程序完美
作者: feiyan 时间: 2023-9-29 16:06
回复 34# 77七 hi 77,非常感谢,想你喝杯咖啡,给我个支付宝的二维码吧。
作者: 77七 时间: 2023-9-29 16:24
回复 36# feiyan
谢谢!请以你的名义捐助到论坛吧!
http://bbs.bathome.net/thread-10403-1-1.html
作者: feiyan 时间: 2023-9-29 19:28
回复 37# 77七 如君所愿,已经向论坛捐助50元。祝77中秋快乐。
作者: feiyan 时间: 2023-9-30 18:39
回复 34# 77七 七七,能帮忙把添加个功能,希望能遍历查找D:文件数据库的多层子文件夹,因为有些文件在子文件夹或孙文件夹内。文件夹可能有好几层的。
作者: 77七 时间: 2023-9-30 19:56
回复 39# feiyan
- @echo off
- rem 文本格式 a|1.pdf|2*.pdf
- rem 批处理保存为ansi编码格式
- cd /d "C:\Users\Administrator\Desktop\test1\"
- for /f "tokens=1* delims=|" %%a in ('type "1.txt"') do (
- echo 创建文件夹 "%%a"
- md "%%a" 2>nul
- set "folder=%%a"
- set "str="
- call :1 "%%b"
- echo=
- )
- pause & exit
-
- :1
- if not defined str (
- set "str=%~1"
- )
- for /f "tokens=1* delims=|" %%x in ("%str%") do (
- echo 查找文件 "%%x"
- (for /f "delims=" %%i in ('dir /b /s /a-d "d:\文件数据库\%%x" 2^>nul') do (
- copy "%%i" "%folder%"
- )) || (
- >>log.txt echo %%x
- )
- if "%%y" neq "" (
- set "str=%%y"
- goto :1
- ) else (
- exit /b
- )
- )
复制代码
作者: feiyan 时间: 2023-9-30 20:44
回复 40# 77七 感谢,完美。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |