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

1.以下代码未经测试,运行前请备份好源文件;
2.将下面代码均放在主文件夹中,保存为ANSI编码;
3.假设图片文件为jpg格式,其它格式可修改批处理1第8行。
批处理1
  1. @echo off
  2. md NewFolder
  3. for /d %%a in (*) do (
  4.     setlocal enabledelayedexpansion
  5.     set /a min=5,max=10,n=0
  6.     set /a "num=!random!%%(max-min+1)+min"
  7.     pushd "%%a"
  8.     for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  9.         set /a n+=1
  10.         set _!random!-!n!=%%i
  11.     )
  12.     set /a x=n-num
  13.     md "%~dp0NewFolder\%%a"
  14.     for /f "tokens=2 delims==" %%i in ('set _^|more +!n!') do (
  15.         copy "%%j" "%~dp0NewFolder\%%a\"
  16.     )
  17.     popd
  18.     endlocal
  19. )
  20. pause
复制代码
批处理2
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /ad NewFolder') do (
  3.     move /y "%%i\*.*" "%~dp0%%~nxi\"
  4.     rd "%%i"
  5. )
  6. rd NewFolder
  7. pause
复制代码

TOP

本帖最后由 qixiaobin0715 于 2023-1-12 17:02 编辑

修改批处理1
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /ad') do (
  3.     md NewFolder 2>nul
  4.     setlocal enabledelayedexpansion
  5.     set /a min=5,max=10,n=0
  6.     set /a "num=!random!%%(max-min+1)+min"
  7.     pushd "%%a"
  8.     for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  9.         set /a n+=1
  10.         set _!random!-!n!=%%i
  11.     )
  12.     set /a x=n-num
  13.     if !x! leq 0 set x=0
  14.     md "%~dp0NewFolder\%%a"
  15.     for /f "tokens=2 delims==" %%i in ('set _^|more +!x!') do (
  16.         copy "%%i" "%~dp0NewFolder\%%a\">nul
  17.     )
  18.     popd
  19.     endlocal
  20. )
  21. pause
复制代码
请注意自定义变量的数量不能超过上限,所以单个子文件夹中的图片文件也不能超过此数量,否则会出错。

TOP

本帖最后由 qixiaobin0715 于 2023-1-12 15:37 编辑

回复 6# 呐阳光
按照这个思路也行,可以自己试试。
可不受自定义变量数量上限的限制。

TOP

按照6楼链接中的思路,可以这样:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /ad') do (
  3.     md NewFolder 2>nul
  4.     setlocal enabledelayedexpansion
  5.     set /a min=5,max=10,m=1
  6.     set /a "num=!random!%%(max-min+1)+min"
  7.     pushd "%%a"
  8.     for /f "delims=" %%i in ('dir /b /a-d *.jpg^|find /c "."') do (
  9.         set x=%%i
  10.     )
  11.     set /a y=x+100
  12.     for /l %%i in (1,1,!y!) do (
  13.         set /a z=!random!%%!x!+1
  14.         if not defined _!z! (
  15.             if !m! leq !num! (
  16.                 set _!z!=true
  17.                 set /a m+=1
  18.             )
  19.         )
  20.     )
  21.     md "%~dp0NewFolder\%%a"
  22.     for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  23.         set /a n+=1
  24.         if defined _!n! (
  25.             copy "%%i" "%~dp0NewFolder\%%a\">nul
  26.         )
  27.     )
  28.     popd
  29.     endlocal
  30. )
  31. pause
复制代码
未经测试
1

评分人数

TOP

回复 13# 呐阳光 7楼代码第8行,引号中修改为"skip=5 delims="试试。

TOP

返回列表