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

[文件操作] [已解决]批处理如何复制所有文件夹且只包括其中特定类型的文件?

小弟想复制某文件夹下的所有文件夹和子文件夹,但不复制文件夹内的文件(除了jpg与gif图片格式),这要怎么写?谢谢!
其实单只是复制文件夹和其子文件夹我已经找到答案了,但要么仅是要文件夹不要文件,或是要文件夹和所有文件的。
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

大大能给我一份么 ,我也需要这样的批处理 ,小弟不会批处理

TOP

因为要全盘复制另一个手机卡的文件结构到新卡,正好用上,多谢楼上诸位高手!
不过回楼上两位,似乎"%wjj%!var!" ——应该为"%wjj%\!var!" 你们少了一个斜杠?

TOP

经cn-dos里一会员的提醒,可以更简洁高效。
  1. @echo off
  2. ::目的文件夹名为 temp
  3. set wjj=temp
  4. for /f "delims=" %%a in ('dir/b/s/ad') do (
  5.    if not exist "%wjj%\" md "%wjj%"
  6.    set "var=%%a"
  7.    setlocal enabledelayedexpansion
  8.    set var=!var:*%cd%=!
  9.    md "%wjj%!var!"
  10.    copy /y "%%a\*.jpg" "%wjj%!var!" >nul 2>nul
  11.    copy /y "%%a\*.gif" "%wjj%!var!" >nul 2>nul
  12.    endlocal
  13. )
  14. copy /y "*.jpg" "temp" >nul 2>nul
  15. copy /y "*.gif" "temp" >nul 2>nul
  16. pause
复制代码

[ 本帖最后由 随风 于 2009-4-7 13:38 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

zqz0012005   ,因为已经有了随风的代码,我就不特意改成批处理测试了,18楼的代码,我早前就已经在cmd窗口测试过了,正确!可能是我在写批处理时有漏洞了吧,谢谢 zqz0012005 ,早先的话语过激,还望海涵我这粗人。

TOP

楼上说得是,我确实没有看过你的代码,刚刚测试了一下,很好,代码比我那三个批要少得多,为了方便后来者,我现在把代码贴出,我自己那三个批就不贴出现丑了,感谢随风大哥的代码!
  1. @echo off
  2. ::目的文件夹名为 temp
  3. set wjj=temp
  4. ::复制文件夹及子文件夹
  5. for /f "delims=" %%a in ('dir/b/s/ad') do (
  6. if not exist "%wjj%\" md "%wjj%"
  7. set "var=%%a"
  8. setlocal enabledelayedexpansion
  9. set var=!var:*%cd%=!
  10. md "%wjj%!var!"
  11. endlocal
  12. )
  13. ::复制 jpg 和 gif 文件
  14. for /f "delims=" %%a in ('dir/b/s/a-d *.jpg *.gif') do (
  15. set "var=%%a"
  16. setlocal enabledelayedexpansion
  17. set var=!var:*%cd%=!
  18. copy /y "%%a" "%wjj%!var!"
  19. endlocal
  20. )
  21. pause
  22. 已经经过测试,代码正确!
复制代码

TOP

。。。好吧。。。有些问题我不想再作评论。。。

事实上,我写5楼代码的时候的确没测试。因为“以前在xcopy命令上折腾过”(http://bbs.verybat.org/viewthread.php?tid=13802&fromuid=37),有过一些经验,所以感觉用不着测试。而代码中有一个字符写漏了,我是特意不想修改。

仅讨论一下代码本身。楼主提到:
如果有多个层的子目录就会出错,原本是第三层的子文件夹内的jpg文件,复制过来后,却成了第二层,其它层的也有类似的情况。

这种情况我倒没有碰到过。再次测试xcopy /s /e "%cd%\a\*.txt" "%cd%\b\" 的结果:

C:\>tree /f a
文件夹 PATH 列表
卷序列号为 A442-A07A
C:\A
│  11.txt

├─11
│  │  21.txt
│  │
│  ├─21
│  │  │  21.txt
│  │  │
│  │  ├─31
│  │  │      31.txt
│  │  │
│  │  └─32
│  └─22
└─12
C:\>tree /f b
文件夹 PATH 列表
卷序列号为 A442-A07A
C:\B
│  11.txt

├─11
│  │  21.txt
│  │
│  ├─21
│  │  │  21.txt
│  │  │
│  │  ├─31
│  │  │      31.txt
│  │  │
│  │  └─32
│  └─22
└─12


[ 本帖最后由 zqz0012005 于 2009-4-6 19:37 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 楼主

如果你是通过回帖中某个完整代码解决的,请说明是谁的代码解决了你的问题。
如果你是通过某人的代码思路解决的,也请说明。(最好能附上完整代码)
如果你是自行解决的,方便的话最好也能把代码分享一下。

问题解决了,既然发了帖求助,那么请为后来人想想,
如果有人遇到同样问题能直接通过你的这个帖解决不是更好吗。
论坛之所以对标题及回帖管理这么严格就是方便后来人,或者说把已经发的帖作为论坛资源。
试想如果日后有人因同样问题搜索到该帖,他该如何解决他的问题呢?

另:
偶觉得你们在编代码时,都没有自己测试过,觉得这样很不负责的,虽是有苦劳,可是完全不留意一下发贴人的感受,完全在想我是无私帮你,不管怎么你都要对我毕恭毕敬,偶是个直肠子的,如果是这样,宁可不回贴
楼主这话说的是否偏激了一点?
对于一个bat老手来说,有很多代码是不需要测试的,不能与你预期的结果一样,也并不能说明别人就没有测试代码,有可能是你的题意描述不清,也有可能是别人对你的题意理解有误。即便是别人写代码时考虑不周,你测试后把问题再回帖说明一下又怎么了?难道你真的是一字千金?如此吝啬?
直肠子和烈性子 都不是坏毛病,但绝不能成为自己行为的一种理由。
别的不说,就说本人11楼的回帖,就是经过测试的,楼主却未对该帖进行任何反馈,为何?就因为你的问题已经解决了?别人的回复已经是多此一举了?
总的来说对楼主的这种“求助”态度不敢恭维,我也是个直肠子和烈性子,如有什么地方得罪的,还请楼主海涵。
技术问题请到论坛发帖求助!

TOP

回复 15楼 的帖子

大家来论坛是为了互相切磋、讨论批处理,无所谓什么得罪不得罪的。
下次如果有问题需要拿出来讨论,别忘了在顶楼把问题背景描述清楚就是了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

楼上的说得是,小弟因为不能时时在线看回贴,所以没有很快的回复大家,抱歉!昨天我自己已经编出来了,用了三个批处理,再用call调用,代码和zqz0012005给的不谋而合,第一个是复制全部文件夹,内容为空;第二个是只复制有图片文件夹的目录及图片,第三个只是给它加入了判断语句,看看它们两个目录子文件夹层是否相同和里面的图片是否在同一层而已。小弟不太会说话,性子又烈,如有什么地方得罪的,还请各位老大海涵。

TOP

因为要操作的文件夹很多的,有上百G的东东

这么重要的信息,为何不在顶楼给出?
故而也没有在本论坛上看看回贴了,而是转去其他论坛

各大批处理论坛有水平和实力帮你解决疑难问题的人,也就是那么一个小圈子,说不定他们只是在不同的论坛有不同的ID而已。
建议阅读提问的智慧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

抱歉了!因为要操作的文件夹很多的,有上百G的东东,都是图片和影片、mp4,如果就是按大家所给中文方案,我自己也是会编的,可是就像dos 论坛那帮人给的,要全部复制再删,我没有办法找个临时分区给呀,zqz0012005,你9楼的代码,如果有多个层的子目录就会出错,原本是第三层的子文件夹内的jpg文件,复制过来后,却成了第二层,其它层的也有类似的情况。偶觉得你们在编代码时,都没有自己测试过,觉得这样很不负责的,虽是有苦劳,可是完全不留意一下发贴人的感受,完全在想我是无私帮你,不管怎么你都要对我毕恭毕敬,偶是个直肠子的,如果是这样,宁可不回贴,故而也没有在本论坛上看看回贴了,而是转去其他论坛,不过你的无私奉献还是值得肯定的,谢谢!

[ 本帖最后由 ganjie 于 2009-4-6 10:32 编辑 ]

TOP

佩服楼主竟然知道那么多批处理论坛。
2009-4-5 04:00
http://www.cn-dos.net/forum/viewthread.php?tid=46798&fpage=1
显然未果。但未见楼主有任何反馈。

2009-4-5 10:26
http://www.bathome.net/thread-4031-1-1.html
即此帖。2009-4-5 12:02 有一个代码回复,而楼主仅回复“没有得到预期的目的”。

2009-4-5 14:18
http://bbs.verybat.org/thread-16969-1-1.html
未见楼主有任何反馈。


如果楼主是这种态度的话,我想以后几乎不会得到任何帮助。。。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

别人好心为你写了代码,你测试不成功应该告诉别人为什么不成功,提示什么错误。
你预期的是什么,实际执行代码得到的是什么。
而不是简单的一句 “没有得到预期的目的” 就否定了别人的劳动。
你来这里发帖求助,别人解答是热心而不是义务,即使没有真正的帮到你,也应该对这份热心表示感谢,不是吗?
而最能体现你对别人劳动成果尊重的方法之一就是认真测试代码,并指出和你预期不符的具体的地方。
:
  1. @echo off
  2. ::目的文件夹名为 temp
  3. set wjj=temp
  4. ::复制文件夹及子文件夹
  5. for /f "delims=" %%a in ('dir/b/s/ad') do (
  6.    if not exist "%wjj%\" md "%wjj%"
  7.    set "var=%%a"
  8.    setlocal enabledelayedexpansion
  9.    set var=!var:*%cd%=!
  10.    md "%wjj%!var!"
  11.    endlocal
  12. )
  13. ::复制 jpg 和 gif 文件
  14. for /f "delims=" %%a in ('dir/b/s/a-d *.jpg *.gif') do (
  15.    set "var=%%a"
  16.    setlocal enabledelayedexpansion
  17.    set var=!var:*%cd%=!
  18.    copy /y "%%a" "%wjj%!var!"
  19.    endlocal
  20. )
  21. pause
复制代码
技术问题请到论坛发帖求助!

TOP

用nircmd试试
shellcopy [source file or wildcard] [destination] {Flags}
从一文件夹下拷贝一个或多个文件至另一文件夹中。并显示进展情况对话框,非常类似资源浏览器下文件复制操作。

可以配合使用以下一个或多个标志值:
yestoall: 自动用'是'应答所有问题
noerrorui: 不显示错误信息提示界面
silent: 静默模式—不显示任何进展信息提示
nosecattr: 不拷贝带有安全属性文件
例子:
nircmd shellcopy "c:\temp\*.*" "d:\temp"
nircmd shellcopy "c:\temp\*.*" "d:\temp" yestoall noerrorui

TOP

返回列表