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

回复 5# qd2024

定义每个 order,然后根据 文件数量选择某个 order
  1. set order16=08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
  2. set order32=
  3. set order =!order%n%!
  4. set/a i=0
  5. for %%a in ( %order% ) do (
  6. set/a i+=1
  7. echo   !i!  %%a
  8. )
复制代码

TOP

分析了一个,规律是这样的
  1. 08  09  10  07
  2. 06  11  12  05
  3. 04  13  14  03
  4. 02  15  16  01
复制代码

TOP

回复 9# qd2024


    首先,不能把批处理放图片文件夹里,图片文件夹作为参数 发给批处理

TOP

把文件夹拖到bat上面
  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
  4. set f=%1
  5. for /f "delims=" %%i in ('dir /b /s /a-d "%f%" 2^>nul ^| find /c /v ""') do (
  6. set n=%%i
  7. )
  8. set order=!order%n%!
  9. set/a i=0
  10. for %%a in ( %order% ) do (
  11. set/a i+=1
  12. echo ren   测试_!i!.jpg  %%a.jpg
  13. )
  14. pause
复制代码

TOP

  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
  4. set f=%1
  5. for /f "delims=" %%i in ('dir /b /s /a-d "%f%" 2^>nul ^| find /c /v ""') do (
  6. set n=%%i
  7. )
  8. echo,
  9. echo folder:     %f%
  10. echo file count: %n%
  11. echo,
  12. set order=!order%n%!
  13. set/a i=0
  14. for %%a in ( %order% ) do (
  15. set/a i+=1
  16. echo ren   测试_!i!.jpg  %%a.jpg
  17. )
  18. echo,
  19. echo, complete
  20. pause
复制代码

TOP

回复 14# qd2024


    如果命令显示正确, echo ren 改成 ren

TOP

你对比一下啊

TOP

还有,我看你的文件名,
有的是 01 02
有的是 1 2

TOP

加了判断  前面有没有0
有没有三位数的?
  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. cd %~dp0
  4. set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
  5. set f=%1
  6. for /f "delims=" %%i in ('dir /b /s /a-d "%f%" 2^>nul ^| find /c /v ""') do (
  7. set n=%%i
  8. )
  9. echo,
  10. echo folder:     %f%
  11. echo file count: %n%
  12. echo,
  13. pushd %f%
  14. cd
  15. set order=!order%n%!
  16. set/a i=0
  17. for %%a in ( %order% ) do (
  18. set/a i+=1
  19. if exist 测试_!i!.jpg (set j=!i!) else (set j=0!i!)
  20. echo ren   测试_!j!.jpg  %%a.jpg
  21. )
  22. popd
  23. echo,
  24. echo, complete
  25. pause
复制代码

TOP

页码规律,powershell
  1. function get-order() {
  2. param(
  3. [int]$n
  4. )
  5. $r = $n /4
  6. $c = 4
  7. $order =  [System.Array]::CreateInstance([int], ($n + 1))
  8. for ( $i = 1 ; $i -le $r ; $i++ ) {
  9. $num = ($i -1) *2 + 1
  10. $x = ($r + 1) - $i
  11. $y = 4
  12. $idx = ( ($x -1) *4 ) + $y
  13. # Write-Host $num  $idx
  14. $order[$idx] = $num
  15. }
  16. for ( $i = 1 ; $i -le $r ; $i++ ) {
  17. $num = ($i -1) *2 + 2
  18. $x = ($r + 1) - $i
  19. $y = 1
  20. $idx = ( ($x -1) *4 ) + $y
  21. # Write-Host $num  $idx
  22. $order[$idx] = $num
  23. }
  24. for ( $i = 1 ; $i -le $r ; $i++ ) {
  25. $num = ($i -1) *2 + 1 + ( $n / 2 )
  26. $x = $i
  27. $y = 2
  28. $idx = ( ($x -1) *4 ) + $y
  29. # Write-Host $num  $idx
  30. $order[$idx] = $num
  31. }
  32. for ( $i = 1 ; $i -le $r ; $i++ ) {
  33. $num = ($i -1) *2 + 2 + ( $n / 2 )
  34. $x = $i
  35. $y = 3
  36. $idx = ( ($x -1) *4 ) + $y
  37. # Write-Host $num  $idx
  38. $order[$idx] = $num
  39. }
  40. return ( $order[1..$n] -join " ")
  41. }
  42. $order = get-order 72
  43. write-host $order
复制代码

TOP

回复 21# qd2024
  1. if exist 测试_!i!.jpg (set j=!i!) else (set j=0!i!)
复制代码
改成
  1. if exist 测试_!i!.jpg (set j=!i!)
  2. if exist 测试_0!i!.jpg (set j=0!i!)
  3. if exist 测试_00!i!.jpg (set j=00!i!)
复制代码

TOP

保存为 xxx.ps1
调用
  1. powershell -file xxx.ps1 128
复制代码
  1. param(
  2. [int]$n
  3. )
  4. function get-order() {
  5. param(
  6. [int]$n
  7. )
  8. $r = $n /4
  9. $c = 4
  10. $order =  [System.Array]::CreateInstance([int], ($n + 1))
  11. for ( $i = 1 ; $i -le $r ; $i++ ) {
  12. $num = ($i -1) *2 + 1
  13. $x = ($r + 1) - $i
  14. $y = 4
  15. $idx = ( ($x -1) *4 ) + $y
  16. # Write-Host $num  $idx
  17. $order[$idx] = $num
  18. }
  19. for ( $i = 1 ; $i -le $r ; $i++ ) {
  20. $num = ($i -1) *2 + 2
  21. $x = ($r + 1) - $i
  22. $y = 1
  23. $idx = ( ($x -1) *4 ) + $y
  24. # Write-Host $num  $idx
  25. $order[$idx] = $num
  26. }
  27. for ( $i = 1 ; $i -le $r ; $i++ ) {
  28. $num = ($i -1) *2 + 1 + ( $n / 2 )
  29. $x = $i
  30. $y = 2
  31. $idx = ( ($x -1) *4 ) + $y
  32. # Write-Host $num  $idx
  33. $order[$idx] = $num
  34. }
  35. for ( $i = 1 ; $i -le $r ; $i++ ) {
  36. $num = ($i -1) *2 + 2 + ( $n / 2 )
  37. $x = $i
  38. $y = 3
  39. $idx = ( ($x -1) *4 ) + $y
  40. # Write-Host $num  $idx
  41. $order[$idx] = $num
  42. }
  43. return ( $order[1..$n] -join " ")
  44. }
  45. if ( $n % 4 -eq 0 ) {
  46. $order = get-order $n
  47. write-host $order
  48. }
复制代码
1

评分人数

TOP

回复 25# qd2024
  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. cd %~dp0
  4. set folder=%1
  5. set order16= 08 09 10 07 06 11 12 05 04 13 14 03 02 15 16 01
  6. for /f "usebackq delims=" %%i in (` dir /b /a-d "%folder%" 2^>nul ^| find /c /v "" `) do (
  7. set n=%%i
  8. )
  9. set order=!order%n%!
  10. echo,
  11. echo folder:     %folder%
  12. echo file count: %n%
  13. echo,
  14. pushd %folder%
  15. for /f "usebackq" %%a in (` dir /b .`) do (
  16. for /f "tokens=2 delims=_" %%a in ("%%~na") do (
  17. set idxScan=%%a
  18. )
  19. call :C_idx_scan_to_real order idxScan idxReal
  20. echo ren  %%a  !idxReal!%%~xa
  21. )
  22. popd
  23. echo,
  24. echo, ----complete----
  25. echo,
  26. pause
  27. exit/b
  28. :C_idx_scan_to_real
  29. setlocal
  30. set order=!%1!
  31. set idx=!%2!
  32. set /a i=0
  33. for %%a in ( %order% ) do (
  34. set /a i+=1
  35. if "!i!" == "%idx%" set idx=%%a
  36. )
  37. (
  38. endlocal
  39. set %3=%idx%
  40. )
  41. goto :eof
复制代码

TOP

删除第25行 echo

TOP

调用
  1. x.ps1 16
复制代码
  1. param(
  2. [int]$count
  3. )
  4. function get-idxReal() {
  5. param(
  6. [int]$count ,
  7. [int]$idxScan
  8. )
  9. $r = [math]::Ceiling( $idxScan / 4 )
  10. $c = $idxScan - ($r-1)*4
  11. $idxReal = switch( $c ) {
  12. 1 { $count/2 + 0 - ($r-1)*2 }
  13. 2 { $count/2 + 1 + ($r-1)*2 }
  14. 3 { $count/2 + 2 + ($r-1)*2 }
  15. 4 { $count/2 - 1 - ($r-1)*2 }
  16. }
  17. return $idxReal
  18. }
  19. $order =  [System.Array]::CreateInstance([int], ($count + 1))
  20. if ( ($count % 4) -eq 0 ) {
  21. 1..$count | ForEach-Object {
  22. $order[$_] = get-idxReal $count $_
  23. }
  24. }
  25. $order[1..$count]  -join ' '
复制代码

TOP

返回列表