标题: [文件操作] 如何将每个目录随机10张图片移动到另一目录(保持原目录结构)? [打印本页]
作者: odrsun 时间: 2017-1-18 23:25 标题: 如何将每个目录随机10张图片移动到另一目录(保持原目录结构)?
本帖最后由 odrsun 于 2017-1-18 23:29 编辑
如何将所有目录下(含子目录)的图片文件,每个目录随机10张图片移动到另一目录(保持原目录结构)?
如题,E盘《图片》目录下,有《A》《B》《C》。。。等子目录,每个目录中均有数量不等的jpg图片,且所有的jpg图片不重名,想实现的功能:
运行一次批处理,就在《图片》目录下所有子目录中,每个目录随机挑选10个文件(不足10张的就全部算进去),移动到E盘《已选择图片》目录下,并保持相应目录结构(如,原来文件路径是E:\图片\A\A01.jpg,移动之后是E:\已选择图片\A\A01.jpg;原来文件路径是E:\图片\C\C01.jpg,移动之后是E:\已选择图片\C\C01.jpg,等等)
感谢热心关注,期待指教。
------------------------------------
和这个帖子有点类似,但是有不同的地方:http://www.bathome.net/thread-39700-1-4.html
作者: odrsun 时间: 2017-1-19 09:09
为什么没人回答
作者: GNU 时间: 2017-1-19 09:32
为什么你会觉得晚上11点半到早上9点之间要有人给你写代码呢
作者: odrsun 时间: 2017-1-19 10:31
好吧。我错了。现在 有人帮忙解答下吗回复 3# GNU
作者: happy886rr 时间: 2017-1-19 17:13
回复 4# odrsun
具体有啥区别啊,你的问题就是直接复制的,我没看到区别。
请描述清楚你的问题,难道你的目录也跟他的一样吗?- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b /s "*.jpg"') do ( set /a N+=1)
- for /f "delims=" %%i in ('dir /a-d /b /s "*.jpg"') do (
- set /a RN=!random!%%!N!+1
- if not defined #!RN! (set "#!RN!=%%i")
- )
-
- for /f "tokens=2 delims==" %%i in ('set #') do (
- xcopy "%%i" "E:\已选择图片%%~pi"
- del /f /q "%%i"
- set /a i+=1
- if !i! equ 10 (goto end)
- )
- :end
- echo 执行完毕!
- pause>nul
复制代码
作者: odrsun 时间: 2017-1-19 17:32
不太一样,把ABC,,,,等等众多的目录底下复制10张图到 已选的目录底下,且路径也保持不变。
作者: odrsun 时间: 2017-1-19 17:34
有不同的地方。回复 5# happy886rr
作者: happy886rr 时间: 2017-1-19 17:38
回复 7# odrsun
子目录也是10张吗?这样复制太多了。如果有个目录一张图都没有怎么办?有的目录只有1张怎么复制?
作者: 523066680 时间: 2017-1-19 18:00
粗暴点的:
对整个文件夹复制副本改名为 已选择图片 (这样就能轻松保持目录结构了哇
再挨个子目录随机删除,直到剩下10张图片为止
如果图片数量 <= 10 ,不处理
如果图片量特别大,那就在数据结构中模拟一次然后实际执行复制。
作者: WHY 时间: 2017-1-19 19:09
本帖最后由 WHY 于 2017-1-20 11:37 编辑
PowerShell- $SrcDir = 'E:\图片'
- $DstDir = 'E:\新图片'
- $num = 10
- $reg = [regex]::Escape($SrcDir);
- dir -Path $SrcDir -Include *.jpg -Recurse | Group { $_.DirectoryName } | %{
- $fd = $_.Name -replace $reg, $DstDir;
- if (![IO.Directory]::Exists($fd)) { [void][IO.Directory]::CreateDirectory($fd) }
- $_.Group | Get-Random -Count $num | Copy -Dest $fd -Force
- }
复制代码
作者: WHY 时间: 2017-1-19 19:10
- @echo off
- for /d /r E:\图片 %%i in (*) do (
- setlocal enabledelayedexpansion
- set "fd=%%i"
- set "fd=!fd:E:\图片=E:\新图片!"
- for %%j in ("%%i\*.jpg") do set /a n+=1 & set "_!Random!_!n!=%%j"
- (for /f "tokens=1*delims==" %%j in ( 'set _' ) do (
- set /a m+=1
- if !m! LEQ 10 ( md "!fd!" & copy "%%k" "!fd!\" )
- ))2>nul
- endlocal
- )
- pause
复制代码
作者: yu2n 时间: 2017-1-19 20:19
- @set "srcDir=R:\Downloads" && rem 来源
- @set "desDir=R:\Downloads2" && rem 目标
- @set "maxNum=3" && rem 最大文件数量
-
- @echo off
- title 随机文件拷贝工具
- setlocal enabledelayedexpansion
-
- rem 获取图片列表
- for /f "delims=?" %%b in ('dir /a/b/s "%srcDir%\*.jpg" "%srcDir%\*.jpeg" "%srcDir%\*.png"') do (
- set/a n+=1
- set "#F!n!=%%~b"
- )
-
- rem 生成随机数
- if %n% LEQ %maxNum% (
- echo 图片小于 %maxNum% 张!程序即将退出。
- pause
- goto :eof
- )
- :loop
- set/a rnd=!random! %% !n! + 1
- if not defined #R%rnd% (
- set/a #R%rnd%=%rnd%
- set/a n2+=1
- )
- if !n2! LSS %maxNum% goto :loop
-
- echo ^> 预览结果
- echo 来源:%srcDir%
- echo 目标:%desDir%
- echo 数量:%maxNum%
- echo 随机选择复制文件预览列表如下:
- for /f "tokens=1,* delims==" %%a in ('set #R') do (
- set "#F2%%b=!#F%%b:%srcDir%=%desDir%!"
- echo !#F2%%b!
- )
- set/p p=按任意键开始执行复制操作… <nul & pause>nul
- echo.& echo.
-
- echo ^> 执行复制操作
- for /f "tokens=1,* delims==" %%a in ('set #R') do (
- echo !#F2%%b!
- for /f "delims=?" %%c in ('echo,!#F2%%b!') do (
- if not exist "%%~dpc" md "%%~dpc"
- copy /v /y /z "!#F%%b!" "%%~dpc"
- )
- )
- set/p p=完成。按任意键退出本程序… <nul & pause>nul
- echo.& echo.
复制代码
- > 预览结果
- 来源:R:\Downloads
- 目标:R:\Downloads2
- 数量:3
- 随机选择复制文件预览列表如下:
- R:\Downloads2\1 2\nature13.jpg
- R:\Downloads2\3\11.png
- R:\Downloads2\4 5 6\pexels-photo.png
- 按任意键开始执行复制操作…
-
- > 执行复制操作
- R:\Downloads2\1 2\nature13.jpg
- 100% 已复制 已复制 1 个文件。
- R:\Downloads2\3\11.png
- 100% 已复制 已复制 1 个文件。
- R:\Downloads2\4 5 6\pexels-photo.png
- 100% 已复制 已复制 1 个文件。
- 完成。按任意键退出本程序…
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |