![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 00:19 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请各位高手帮个忙,看看这个批处理该怎么做? |
| 可打印版本 1,056 / 12 |
| 第1楼 jtyuer | 发表于 2006-08-14 13:07 |
| 初级用户 发帖 29 积分 73 | |
|
请各位高手帮个忙,看看这个批处理该怎么做? 假定有一个目录AAA,里面有许多子目录a1、a2、a3……,每个子目录里都有N个名字
相同但内容不同的文件,比如a1.txt、a2.txt、a3.txt,现在我想对AAA目录进行备份, 备份目录可任意给定(比如BBB),但要求AAA里面的子目录结构不变,而且只要备份每个子目录里的 a1.txt、a2.txt、a3.txt文件 AAA |---a1 | |-----XXXX | |-----XXXX | |-----a1.txt | |-----a2.txt | |-----a3.txt | |---a2 | |-----XXXX | |-----XXXX | |-----a1.txt | |-----a2.txt | |-----a3.txt | |---a3 | |-----XXXX | |-----XXXX | |-----a1.txt | |-----a2.txt | |-----a3.txt | |---a4 |-----XXXX |-----XXXX |-----a1.txt |-----a2.txt |-----a3.txt 备份后的结构如下: BBB |---a1 | |-----a1.txt | |-----a2.txt | |-----a3.txt | |---a2 | |-----a1.txt | |-----a2.txt | |-----a3.txt | |---a3 | |-----a1.txt | |-----a2.txt | |-----a3.txt | |---a4 |-----a1.txt |-----a2.txt |-----a3.txt 请各位高手帮个忙,帮忙做个批处理文件。先谢谢大家了。 |
|
| 第2楼 fastslz | 发表于 2006-08-14 13:38 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
如果单纯进行备份建议使用压缩备份Winrar或Pkzip
@echo off start /wait WinRAR u -ep1 -r BBB AAA\*.TXT 或者 @echo off Pkzip -a -p -r BBB AAA\*.TXT |
|
| 第3楼 fastslz | 发表于 2006-08-14 13:48 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
补充另外一种目录结构
@echo off start /wait WinRAR u -es1 -r BBB AAA\*.TXT 或者 @echo off Pkzip -a -P -r BBB AAA\*.TXT 2楼和3楼压缩命令参数都要注意大小写 |
|
| 第4楼 namejm | 发表于 2006-08-14 17:55 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
经过测试后可行的代码如下,此批处理可以放在任意位置:
[ Last edited by namejm on 2006-8-14 at 19:57 ] |
|
| 第5楼 jtyuer | 发表于 2006-08-14 17:59 |
| 初级用户 发帖 29 积分 73 | |
|
苦恼啊,楼上的兄弟,你的方法满足不了我的要求,麻烦你再辛苦一下!
|
|
| 第6楼 namejm | 发表于 2006-08-14 18:03 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
忘了说了,这段代码要放在目录AAA下执行。你再试一下看行不行。
|
|
| 第7楼 fastslz | 发表于 2006-08-14 18:39 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
压缩备份方式不好吗?xcopy 应该没那么复杂
@echo off xcopy /e /h /r /y .\aaa\*.txt .\bbb\ 或者 @echo off FOR %%A IN (a1 a2 a3) DO xcopy /e /h /r /y .\aaa\%%A.txt .\bbb\ |
|
| 第8楼 jtyuer | 发表于 2006-08-14 19:18 |
| 初级用户 发帖 29 积分 73 | |
Originally posted by namejm at 2006-8-14 17:55: |
|
| 第9楼 jtyuer | 发表于 2006-08-14 19:42 |
| 初级用户 发帖 29 积分 73 | |
Originally posted by fastslz at 2006-8-14 18:39: 根据提示,适当修改,已完成。 谢谢各位老大,谢谢! |
|
| 第10楼 namejm | 发表于 2006-08-14 20:04 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by fastslz at 2006-8-14 18:39: 如果要用xcopy的话,不会那么简单的,因为楼主要求复制的是每个子目录中的a1.txt、a2.txt和a3.txt这三个文件,并且要求bbb的目录可以任意指定。观察兄这两段代码,第一段代码只是把所有的txt文件都复制到与aaa文件夹的同一目录的bbb文件夹下,而第二段虽然只复制了那三个文件,但是只能复制到同一目录下的bbb文件夹下,这两段代码共同的缺憾就是不能任意指定bbb文件夹的位置。 修改后的代码在4楼,原来的代码没有经过测试,导致有些笔误和疏漏。请楼主再测试一下。 |
|
| 第11楼 jtyuer | 发表于 2006-08-14 21:06 |
| 初级用户 发帖 29 积分 73 | |
Originally posted by namejm at 2006-8-14 20:04: 按照老大给的方法试验了一下,不理想,在BBB目录中拷贝了所需要的文件的同时,也把AAA里面的其它孙目录(子目录的子目录。不知这样称呼对不对?)搬到BBB目录中了 自己鼓捣了一整天,终于做出了一个,还成,基本满足了我的要求,贴出来老大帮我分析一下,看看还能不能简练些?主要是自己做WindowsXP OEM 20合一的盘用,以前光靠手动提取、拷贝文件让人心烦,而且容易出错 我自己瞎鼓捣的东东: @Echo Off Set TT=WindowsXP OEM文件提取复制工具 COLOR 1F TITLE %TT% :start CLS Echo. Echo ╭══════════════════╮ Echo ║ ║ Echo ╭═══┤ WindowsXP OEM文件提取复制工具 ├═══╮ Echo ║ ║ ║ ║ Echo ║ ╰══════════════════╯ ║ Echo ║ ║ Echo ║ 您是要从光盘或硬盘中提取OEM文件呢? ║ Echo ║ 还是想拷贝现有的OEM文件到硬盘中? ║ Echo ║ ║ Echo ║ 从光盘或硬盘中提取OEM文件 ║ Echo ║ 拷贝现有的OEM文件到硬盘中 ║ Echo ║ 从光盘或硬盘中提取OEM图标 ║ Echo ║ 拷贝现有的OEM图标到硬盘中 ║ Echo ║ 退出 ║ Echo ║ ║ Echo ╟──────────────────────────╢ Echo ║ 注:1. 根据提示自行输入光盘或硬盘文件目录的绝对路径║ Echo ║ 2. 文件所在路径不允许有空格。 ║ Echo ╟══════════════════════════╢ Echo ║ 版权所有:jtyuer 供网友们交流研究,翻版不究 ║ Echo ╰──────────────────────────╯ Echo. Set Choice= Set /P Choice= 请选择要进行的操作(1/2/3/4/Q),然后按回车: If Not '%Choice%'=='' SET Choice=%Choice:~0,1% If /I '%Choice%'=='1' GOTO funa If /I '%Choice%'=='2' GOTO funa If /I '%Choice%'=='3' GOTO funa If /I '%Choice%'=='4' GOTO funa If /I '%Choice%'=='Q' EXIT Goto start :funa If /I '%Choice%'=='1' ( TITLE %TT% - 从光盘或硬盘中提取OEM文件 ) If /I '%Choice%'=='2' ( TITLE %TT% - 拷贝现有的OEM文件到硬盘中 Goto funb ) If /I '%Choice%'=='3' ( TITLE %TT% - 拷贝现有的OEM图标到硬盘中 Goto func ) If /I '%Choice%'=='4' ( TITLE %TT% - 拷贝现有的OEM图标到硬盘中 Goto fund ) If "%Err%"=="" ( CLS ) :funa1 cls Echo 请输入OEM文件所在的目录名,如c:\1234 Echo. Echo 输入路径时不包括i386子目录路径 echo. Set input= Set /P input= 输入路径: If "%input%"=="" Goto funa If Not Exist %input% ( Set Err=1 Echo. CLS Echo 您所输入的OEM文件目录路径不正确,请重新输入 Echo. Goto :funa1 ) ::funa2 cls Echo 请输入保存OEM文件的目录名,如d:\1234 echo. Set output= Set /P output= 输入路径: If "%input%"=="" Goto funa1 If Not Exist %output% ( Set Err=1 Echo. CLS Echo 保存OEM文件的目录%output%不存在,自动建立%output%目录 Echo. Echo. Echo. @md %output% ) :Copy @Echo dpcdll.dl_>%temp%\oem.txt @Echo oembios.bi_>>%temp%\oem.txt @Echo oembios.ca_>>%temp%\oem.txt @Echo oembios.da_>>%temp%\oem.txt @Echo oembios.si_>>%temp%\oem.txt @Echo pidgen.dll>>%temp%\oem.txt @Echo setupp.ini>>%temp%\oem.txt @Echo winnt.sif>>%temp%\oem.txt for /f %%a in ('dir /ad /b %input%') do md %output%\%%a\i386 & FOR /f %%b in (%temp%\oem.txt) do copy /y %input%\%%a\i386\%%b %output%\%%a\i386\ Goto Exit :funb cls Echo 请输入OEM文件所在的目录名,如c:\1234 Echo. Echo 输入路径时不包括i386子目录路径 echo. Set input= Set /P input= 输入路径: If "%input%"=="" Goto funb If Not Exist %input% ( Set Err=1 Echo. CLS Echo 您所输入的OEM文件目录路径不正确,请重新输入 Echo. Goto funb ) :funb1 cls Echo 请输入要拷贝OEM文件的目录名,如d:\1234 echo. Set output= Set /P output= 输入路径: If "%input%"=="" Goto funb1 If Not Exist %output% ( Set Err=1 Echo. CLS Echo 保存OEM文件的目录%output%不存在,自动建立%output%目录 Echo. Echo. @md %output% ) :Copy For /f %%m In ('dir /ad /b %input%') do md %output%\%%m\i386 & Copy /y %input%\%%m\i386\*.* %output%\%%m\i386\ Goto Exit :func cls Echo 请输入OEM图标所在的目录名,如c:\1234 Echo. Set input= Set /P input= 输入路径: If "%input%"=="" Goto func If Not Exist %input% ( Set Err=1 Echo. CLS Echo 您所输入的OEM图标目录路径不正确,请重新输入 Echo. Goto func ) :func1 cls Echo 请输入要拷贝OEM图标的目录名,如d:\1234 echo. Set output= Set /P output= 输入路径: If "%input%"=="" Goto funb1 If Not Exist %output% ( Set Err=1 Echo. CLS Echo 保存OEM图标的目录%output%不存在,自动建立%output%目录 Echo. Echo. @md %output% ) :Copy If Exist %temp%\ml.txt Del %temp%\ml.txt If Exist %temp%\oem.txt Del %temp%\oem.txt @Echo oeminfo.ini>%temp%\oem.txt @Echo oemlogo.bmp>>%temp%\oem.txt for /f %%a in ('dir /ad /b %input%') do md %output%\%%a\$OEM$\$$\SYSTEM32 & FOR /f %%b in (%temp%\oem.txt) do copy /y %input%\%%a\$OEM$\$$\SYSTEM32\%%b %output%\%%a\$OEM$\$$\SYSTEM32\ Goto Exit :fund cls Echo 请输入OEM图标所在的目录名,如c:\1234 Echo. Set input= Set /P input= 输入路径: If "%input%"=="" Goto fund If Not Exist %input% ( Set Err=1 Echo. CLS Echo 您所输入的OEM图标所在的目录路径不正确,请重新输入 Echo. Goto fund ) :fund1 cls Echo 请输入要拷贝OEM图标的目录名,如d:\1234 echo. Set output= Set /P output= 输入路径: If "%input%"=="" Goto fund1 If Not Exist %output% ( Set Err=1 Echo. CLS Echo 保存OEM文件的目录%output%不存在,自动建立%output%目录 Echo. @md %output% ) :Copy For /f %%m In ('dir /ad /b %input%') do md %output%\%%m\$OEM$\$$\SYSTEM32 & Copy /y %input%\%%m\$OEM$\$$\SYSTEM32\*.* %output%\%%m\$OEM$\$$\SYSTEM32\ Goto Exit :Exit CLS Echo. Echo ╭══════════════════╮ Echo ║ ║ Echo ╭═══┤ WindowsXP OEM文件提取复制工具 ├═══╮ Echo ║ ║ ║ ║ Echo ║ ╰══════════════════╯ ║ Echo ║ ║ Echo ║ 您需要的操作已经完成,请核查. . . ║ Echo ║ 感谢您的使用! ║ Echo ║ 你还准备继续拷贝文件吗? ║ Echo ║ ║ Echo ║ ║ Echo ║ 继续拷贝文件 ║ Echo ║ ║ Echo ║ 退出 ║ Echo ║ ║ Echo ╟──────────────────────────╢ Echo ║ 注:1. 根据提示自行输入光盘或硬盘文件目录的绝对路径║ Echo ║ 2. 文件所在路径不允许有空格。 ║ Echo ╟══════════════════════════╢ Echo ║ 版权所有:jtyuer 供网友们交流研究,翻版不究 ║ Echo ╰──────────────────────────╯ Echo. Set Choice= Set /P Choice= 请选择要进行的操作(y/n),然后按回车: If Not '%Choice%'=='' SET Choice=%Choice:~0,1% If /I '%Choice%'=='y' GOTO start If /I '%Choice%'=='n' GOTO end Goto Exit :End |
|
| 第12楼 namejm | 发表于 2006-08-15 08:34 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by jtyuer at 2006-8-14 21:06: 看了你在顶楼的帖子,你AAA目录下的子目录只有一层啊,你也没有说子目录下还有子目录的,汗一个先。请把AAA的完整目录结构、你想要的目录和文件帖出来再说吧,再没弄明白你准确的需求前,没有谁的代码是对的。 |
|
| 第13楼 namejm | 发表于 2006-08-15 08:54 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re jtyuer『第 11 楼』:
你这段代码确实有可再精简的地方,并且还有几处错误。现略举一二: 1、“文件所在路径不允许有空格。”其实没必要如此苛刻,路径也可以带空格的,只要把路径用引号括起来就行了; 2、If Not '%Choice%'=='' SET Choice=%Choice:~0,1%一句中,if语句多余,只保留set语句就可以了; 3、If /I '%Choice%'=='1' GOTO funa一句中,/I 没必要,而在If /I '%Choice%'=='Q' EXIT中应该保留,具体原因,你多想两次就明白了; 4、:funa段中,If "%Err%"=="" 语句中的%Err%不知从何而来; 5、:funa1段中,goto :funa1的语句是错误的;令我感到奇怪的是,:funa1、:funa2和以下的:funb1等段,前面并没有明确地指出有跳转到该段的语句,它们会得到执行吗? 6、:Copy段的标号取名不当,和CMD命令中的copy重合了,一旦要用跳转语句goto copy,还真不知道会有什么结果呢(我这里尚未测试),即使不会发生什么意外,但是把标号名取得和命令名一模一样的做法,不可取; 7、 这段的@符号完全没必要,可精简为: 8、:funa这段的功能只是把CMD窗口的标题改变了,其实只要把改变的标题做到相应的段里就可以了,感觉这段代码没存在的必要。 罗罗嗦嗦谈了好几点,希望你针对具体需求作相应变动,精简工作大有可为 ![]() |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |