Board logo

标题: [文件操作] [已解决]批处理,将当前目录下所有满足条件的jpg、mp4文件,移动到某个文件夹里。 [打印本页]

作者: ygqiang    时间: 2016-2-22 08:28     标题: [已解决]批处理,将当前目录下所有满足条件的jpg、mp4文件,移动到某个文件夹里。

本帖最后由 ygqiang 于 2016-2-22 13:50 编辑

[已解决]批处理,将当前目录下所有满足条件的jpg、mp4文件,移动到某个文件夹里。

当前目录下,文件如果满足下面的条件,
就移动到当前目录下的某个文件夹里(名字是:zuk手机)

IMG_*_*.jpg(开头是IMG_,中间有_,扩展名是jpg)
Screenshot_*.jpg(开头是Screenshot_,扩展名是jpg)
VID_*.mp4(开头是VID_,扩展名是mp4)




比如
IMG_20151211_192725.jpg
IMG_20151216_153156.jpg
IMG_20151216_211727.jpg
IMG_20151229_170705.jpg
IMG_20160104_083240.jpg
IMG_20160116_183629.jpg
IMG_20160211_081017.jpg

Screenshot_2016-01-13-19-27-29.jpg
Screenshot_2016-01-16-17-24-16.jpg
Screenshot_2016-01-22-19-26-01.jpg

VID_20160119_104129.mp4
VID_20160124_101819.mp4
作者: k1314521jx    时间: 2016-2-22 10:16

@echo off
xcopy /c /s /y *.jpg  E:\test\
xcopy /c /s  /y *.mp4 E:\test\
pause
作者: ivor    时间: 2016-2-22 10:39

本帖最后由 ivor 于 2016-2-22 10:43 编辑
  1. #!/usr/bin/env python
  2. # Python 3.5.1
  3. # coding:utf-8
  4. import os, re
  5. if not os.path.exists("zuk手机"):
  6.     os.mkdir("zuk手机")
  7. for file in os.listdir("."):
  8.     if file.endswith(".jpg") | file.endswith(".mp4"):
  9.         if file.startswith("IMG") | file.startswith("VID") | file.startswith("Screenshot"):
  10.             os.rename(file, "zuk手机//%s" % file)
复制代码

作者: ygqiang    时间: 2016-2-22 11:30

ivor 发表于 2016-2-22 10:39



能否用bat代码直接完成。谢谢。
作者: ygqiang    时间: 2016-2-22 11:33

ivor 发表于 2016-2-22 10:39


当前目录下,文件如果满足下面的条件,
就移动到当前目录下的某个文件夹里(名字是:zuk手机)

IMG_*_*.jpg(开头是IMG_,中间有_,扩展名是jpg)
Screenshot_*.jpg(开头是Screenshot_,扩展名是jpg)
VID_*.mp4(开头是VID_,扩展名是mp4)
作者: ivor    时间: 2016-2-22 12:03

本帖最后由 ivor 于 2016-2-22 12:43 编辑

回复 5# ygqiang
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b *.jpg *.mp4') do (
  3. echo %%a | findstr /R "^IMG_.*_.*\.jpg" && move "%%a" ".\zuk手机\%%a"
  4. echo %%a | findstr /R "^Screenshot_.*\.jpg" && move "%%a" ".\zuk手机\%%a"
  5. echo %%a | findstr /R "^VID_.*\.mp4" && move "%%a" ".\zuk手机\%%a"
  6. )
  7. pause
复制代码

作者: ygqiang    时间: 2016-2-22 12:25

回复 6# ivor


    findstr /R "^IMG_.*" && move "%%a" ".\zuk手机\%%a"

实验过了。这个代码不满足要求。
要求是:IMG_*_*.jpg(开头是IMG_,中间有_,扩展名是jpg)

如果有IMG_0103.JPG这种图片文件,不需要移动。
作者: ivor    时间: 2016-2-22 12:42

回复 7# ygqiang


    我在6楼的代码已更新
作者: ygqiang    时间: 2016-2-22 13:14

回复  ygqiang


    我在6楼的代码已更新
ivor 发表于 2016-2-22 12:42



    测试过了,好用。谢谢
作者: ygqiang    时间: 2016-2-22 13:31

本帖最后由 ygqiang 于 2016-2-22 13:37 编辑
回复  ygqiang


    我在6楼的代码已更新
ivor 发表于 2016-2-22 12:42


多谢。请教另一个问题。。。
下面的代码,如果最终没有满足移动条件的文件,这样zuk手机目录下就是空的了。
如何修改代码,判断避免生成空的zuk手机文件夹?
(或者最后判断目录下没有文件就删除目录)
  1. @echo off
  2. echo 保存文件执行路径
  3. pushd "%~dp0"
  4. if not exist "d:\%date:~0,4%-%date:~5,2%" md "d:\%date:~0,4%-%date:~5,2%"
  5. if not exist "d:\%date:~0,4%-%date:~5,2%\zuk手机" md "d:\%date:~0,4%-%date:~5,2%\zuk手机"
  6. cd /d "d:\%date:~0,4%-%date:~5,2%"
  7. for /f "delims=" %%a in ('dir /b *.jpg *.mp4') do (
  8. echo %%a | findstr /R "^IMG_.*_.*\.jpg" && move "%%a" ".\zuk手机\%%a"
  9. echo %%a | findstr /R "^Screenshot_.*\.jpg" && move "%%a" ".\zuk手机\%%a"
  10. echo %%a | findstr /R "^VID_.*\.mp4" && move "%%a" ".\zuk手机\%%a"
  11. )
  12. echo 恢复文件执行路径
  13. popd
  14. exit
复制代码

作者: ivor    时间: 2016-2-22 13:41

  1. dir .\zuk手机  /b | findstr /r ".*" || rd .\zuk手机
复制代码
如果.\zuk手机 没有任何文件,删除文件夹
作者: ygqiang    时间: 2016-2-22 13:49

最终代码。。。
  1. echo 保存文件执行路径
  2. pushd "%~dp0"
  3. if not exist "d:\%date:~0,4%-%date:~5,2%" md "d:\%date:~0,4%-%date:~5,2%"
  4. if not exist "d:\%date:~0,4%-%date:~5,2%\zuk手机" md "d:\%date:~0,4%-%date:~5,2%\zuk手机"
  5. cd /d "d:\%date:~0,4%-%date:~5,2%"
  6. for /f "delims=" %%a in ('dir /b *.jpg *.mp4') do (
  7. echo %%a | findstr /R "^IMG_.*_.*\.jpg" && move "%%a" ".\zuk手机\%%a"
  8. echo %%a | findstr /R "^Screenshot_.*\.jpg" && move "%%a" ".\zuk手机\%%a"
  9. echo %%a | findstr /R "^VID_.*\.mp4" && move "%%a" ".\zuk手机\%%a"
  10. )
  11. dir .\zuk手机  /b | findstr /r ".*" || rd .\zuk手机
  12. echo 恢复文件执行路径
  13. popd
  14. exit
复制代码

作者: ygqiang    时间: 2016-2-22 14:12

如果.\zuk手机 没有任何文件,删除文件夹
ivor 发表于 2016-2-22 13:41
  1.    
  2. for /f "delims=" %%a in ('dir /b *.*') do (
  3. move "%%a" "C:\000\00-00\新建文件夹\%%a"
  4. )
复制代码
  1. for /f "delims=" %%a in ('dir /b *.*') do (
  2. move "%%a" "C:\000\00-00\新建文件夹"
  3. )
复制代码
请问下,这2个代码,没啥差别吧?完全一样的效果?
作者: ivor    时间: 2016-2-22 14:24

回复 13# ygqiang


    区别就是,第一个  可以更改文件名字,有时也会用move 当做rename使用
作者: WHY    时间: 2016-2-22 19:06

通配符,不可以吗?
  1. md 某个文件夹 2>nul
  2. move IMG_*_*.jpg 某个文件夹\
  3. move Screenshot_*.jpg 某个文件夹\
  4. move VID_*.mp4 某个文件夹\
复制代码

作者: codegay    时间: 2016-2-22 20:02

应该有支持正则表达式的移动文件用的命令吧?
作者: ygqiang    时间: 2016-2-23 09:13

通配符,不可以吗?
WHY 发表于 2016-2-22 19:06



    多谢。这个更简单、效率更高。。。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2