标题: [文件操作] [已解决]请问如何批处理如何将子文件夹中图片随机采样并还原?感谢 [打印本页]
作者: 呐阳光 时间: 2023-1-11 01:11 标题: [已解决]请问如何批处理如何将子文件夹中图片随机采样并还原?感谢
本帖最后由 呐阳光 于 2023-1-12 21:08 编辑
批处理1:父文件夹中包含多个子文件夹,从每一个子文件夹中随机采样5~10张的图片样本,存入到新的文件夹中,新文件夹名与采样的子文件夹名相同
采样后的图片我处理过后需要还原到原文件夹里。
批处理2:采样的图片还原到对应原文件夹里
我看到一个帖子里的解答,链接如下,但是我测试只创立了新的文件夹,并没采样复制图片到新文件夹里,求助大佬们帮帮我,感谢!
http://www.bathome.net/viewthrea ... hlight=%CB%E6%BB%FA
作者: 呐阳光 时间: 2023-1-11 01:15
回复 1# 呐阳光
或者每个子文件夹随机复制10个也行,具体几个,可修改或者可输入,感谢大佬
作者: 77七 时间: 2023-1-11 02:12
@REM 脚本与主文件夹同目录
作者: terse 时间: 2023-1-11 06:56
- @echo off&setlocal enabledelayedexpansion
- set n=5
- set "folder_a=%cd%"
- pushd "..\"
- set "folder_b=%cd%"
- popd
- for /d %%d in ("!folder_b!\*") do (
- if "!folder_a!" neq "%%d" (
- echo 正在处理 %%d ...
- set "new_folder=%folder_a%\%%~nxd"
- rem del /q "!new_folder!\*.*"
- rem rd /q "!new_folder!"
- md "!new_folder!" 2>nul
- setlocal
- for /f "delims=" %%a in ('dir /b /a-d "%%d"') do set ":!random!!random!!random!=%%a"
- for /f "tokens=1* delims==" %%i in ('set :^|sort') do (
- set /anum+=1
- set "%%i="
- if !num! leq %n% (
- copy "%%d\%%j" "%%~nxd" >nul
- rem 处理图片文件代码
- rem copy "!new_folder!\%%j" "%%d\" 处理后再COPY回原目录
- )
- )
- endlocal
- )
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2023-1-11 15:44
本帖最后由 qixiaobin0715 于 2023-1-11 16:45 编辑
1.以下代码未经测试,运行前请备份好源文件;
2.将下面代码均放在主文件夹中,保存为ANSI编码;
3.假设图片文件为jpg格式,其它格式可修改批处理1第8行。
批处理1- @echo off
- md NewFolder
- for /d %%a in (*) do (
- setlocal enabledelayedexpansion
- set /a min=5,max=10,n=0
- set /a "num=!random!%%(max-min+1)+min"
- pushd "%%a"
- for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
- set /a n+=1
- set _!random!-!n!=%%i
- )
- set /a x=n-num
- md "%~dp0NewFolder\%%a"
- for /f "tokens=2 delims==" %%i in ('set _^|more +!n!') do (
- copy "%%j" "%~dp0NewFolder\%%a\"
- )
- popd
- endlocal
- )
- pause
复制代码
批处理2- @echo off
- for /f "delims=" %%i in ('dir /b /s /ad NewFolder') do (
- move /y "%%i\*.*" "%~dp0%%~nxi\"
- rd "%%i"
- )
- rd NewFolder
- pause
复制代码
作者: 呐阳光 时间: 2023-1-12 00:49
本帖最后由 呐阳光 于 2023-1-12 00:52 编辑
1.以下代码未经测试,运行前请备份好源文件;
2.将下面代码均放在主文件夹中,保存为ANSI编码;
3.假设图 ...
qixiaobin0715 发表于 2023-1-11 15:44
您好,经过测试批处理1,发现有1个问题,新建的文件夹里图片没有复制过来?麻烦大佬再次出手,非常感谢!
PS:
下面这个链接是您以前帮助过别人的,10楼那个随机取7个图片我测试可以复制成功
http://www.bathome.net/viewthrea ... hlight=%CB%E6%BB%FA
作者: qixiaobin0715 时间: 2023-1-12 09:21
本帖最后由 qixiaobin0715 于 2023-1-12 17:02 编辑
修改批处理1- @echo off
- for /f "delims=" %%a in ('dir /b /ad') do (
- md NewFolder 2>nul
- setlocal enabledelayedexpansion
- set /a min=5,max=10,n=0
- set /a "num=!random!%%(max-min+1)+min"
- pushd "%%a"
- for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
- set /a n+=1
- set _!random!-!n!=%%i
- )
- set /a x=n-num
- if !x! leq 0 set x=0
- md "%~dp0NewFolder\%%a"
- for /f "tokens=2 delims==" %%i in ('set _^|more +!x!') do (
- copy "%%i" "%~dp0NewFolder\%%a\">nul
- )
- popd
- endlocal
- )
- pause
复制代码
请注意自定义变量的数量不能超过上限,所以单个子文件夹中的图片文件也不能超过此数量,否则会出错。
作者: qixiaobin0715 时间: 2023-1-12 12:52
本帖最后由 qixiaobin0715 于 2023-1-12 15:37 编辑
回复 6# 呐阳光
按照这个思路也行,可以自己试试。
可不受自定义变量数量上限的限制。
作者: 呐阳光 时间: 2023-1-12 21:06
回复 7# qixiaobin0715
非常感谢,测试成功,子文件图片数量一般几十到几百个,暂时没有遇到问题,感谢大佬
作者: 呐阳光 时间: 2023-1-12 21:08
回复 4# terse
感谢大佬的热情帮忙,这个测试随机采样有点问题,我已经找到答案了,再次感谢!
作者: qixiaobin0715 时间: 2023-1-13 08:43
按照6楼链接中的思路,可以这样:- @echo off
- for /f "delims=" %%a in ('dir /b /ad') do (
- md NewFolder 2>nul
- setlocal enabledelayedexpansion
- set /a min=5,max=10,m=1
- set /a "num=!random!%%(max-min+1)+min"
- pushd "%%a"
- for /f "delims=" %%i in ('dir /b /a-d *.jpg^|find /c "."') do (
- set x=%%i
- )
- set /a y=x+100
- for /l %%i in (1,1,!y!) do (
- set /a z=!random!%%!x!+1
- if not defined _!z! (
- if !m! leq !num! (
- set _!z!=true
- set /a m+=1
- )
- )
- )
- md "%~dp0NewFolder\%%a"
- for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
- set /a n+=1
- if defined _!n! (
- copy "%%i" "%~dp0NewFolder\%%a\">nul
- )
- )
- popd
- endlocal
- )
- pause
复制代码
未经测试
作者: 呐阳光 时间: 2023-1-13 23:37
回复 11# qixiaobin0715
感谢大佬,测试成功的!
作者: 呐阳光 时间: 2023-1-31 19:41
本帖最后由 呐阳光 于 2023-1-31 19:45 编辑
回复 5# qixiaobin0715
大佬,您好,还可以帮忙写个升级版吗?我的每个图片文件夹里的图片文件名前缀是相同的,后缀是0000,0001,0002....递增的。
比如 ***0000.jpg
***0001.jpg
***0002.jpg
在此基础上,随机提取图片的过程中不取前面5个图片。(默认图片数量是大于5个的)
再次感谢!祝您新年快乐!
作者: qixiaobin0715 时间: 2023-2-1 08:16
回复 13# 呐阳光 7楼代码第8行,引号中修改为"skip=5 delims="试试。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |