找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: qd2024

[文件操作] 【已解决】多个BAT代码合并,指定关键字执行具体代码

[复制链接]
 楼主| 发表于 2024-1-10 20:15:29 | 显示全部楼层
回复 15# newswan


    好的  12、13楼有什么区别
发表于 2024-1-10 20:19:16 | 显示全部楼层
你对比一下啊
 楼主| 发表于 2024-1-10 20:20:26 | 显示全部楼层
回复 15# newswan

改前 有对比  改后 系统找不到文件
发表于 2024-1-10 20:35:35 | 显示全部楼层
还有,我看你的文件名,
有的是 01 02
有的是 1 2
发表于 2024-1-10 20:49:12 | 显示全部楼层
加了判断  前面有没有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
复制代码
 楼主| 发表于 2024-1-10 21:29:24 | 显示全部楼层
本帖最后由 qd2024 于 2024-1-10 21:32 编辑

回复 20# newswan

应该会有3位数的情况    不足3位的用0补位
发表于 2024-1-10 21:30:37 | 显示全部楼层
页码规律,powershell

  1. function get-order() {
  2.         param(
  3.                 [int]$n
  4.         )

  5.         $r = $n /4
  6.         $c = 4
  7.        
  8.         $order =  [System.Array]::CreateInstance([int], ($n + 1))
  9.        
  10.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  11.                 $num = ($i -1) *2 + 1
  12.                 $x = ($r + 1) - $i
  13.                 $y = 4
  14.                 $idx = ( ($x -1) *4 ) + $y
  15.         #        Write-Host $num  $idx
  16.                 $order[$idx] = $num
  17.         }

  18.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  19.                 $num = ($i -1) *2 + 2
  20.                 $x = ($r + 1) - $i
  21.                 $y = 1
  22.                 $idx = ( ($x -1) *4 ) + $y
  23.         #        Write-Host $num  $idx
  24.                 $order[$idx] = $num
  25.         }

  26.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  27.                 $num = ($i -1) *2 + 1 + ( $n / 2 )
  28.                 $x = $i
  29.                 $y = 2
  30.                 $idx = ( ($x -1) *4 ) + $y
  31.         #        Write-Host $num  $idx
  32.                 $order[$idx] = $num
  33.         }

  34.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  35.                 $num = ($i -1) *2 + 2 + ( $n / 2 )
  36.                 $x = $i
  37.                 $y = 3
  38.                 $idx = ( ($x -1) *4 ) + $y
  39.         #        Write-Host $num  $idx
  40.                 $order[$idx] = $num
  41.         }
  42.         return ( $order[1..$n] -join " ")
  43. }

  44. $order = get-order 72

  45. write-host $order
复制代码
发表于 2024-1-10 21:33:39 | 显示全部楼层
回复 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!)
复制代码
 楼主| 发表于 2024-1-10 21:44:15 | 显示全部楼层
回复 22# newswan


    这个怎么用
 楼主| 发表于 2024-1-10 21:51:28 | 显示全部楼层
回复 23# newswan


    能不能把"_"前面的汉字忽略了,不管是什么汉字都行,只对"_"后面的数字有效
发表于 2024-1-10 21:53:17 | 显示全部楼层
保存为 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.        
  11.         $order =  [System.Array]::CreateInstance([int], ($n + 1))
  12.        
  13.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  14.                 $num = ($i -1) *2 + 1
  15.                 $x = ($r + 1) - $i
  16.                 $y = 4
  17.                 $idx = ( ($x -1) *4 ) + $y
  18.         #        Write-Host $num  $idx
  19.                 $order[$idx] = $num
  20.         }

  21.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  22.                 $num = ($i -1) *2 + 2
  23.                 $x = ($r + 1) - $i
  24.                 $y = 1
  25.                 $idx = ( ($x -1) *4 ) + $y
  26.         #        Write-Host $num  $idx
  27.                 $order[$idx] = $num
  28.         }

  29.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  30.                 $num = ($i -1) *2 + 1 + ( $n / 2 )
  31.                 $x = $i
  32.                 $y = 2
  33.                 $idx = ( ($x -1) *4 ) + $y
  34.         #        Write-Host $num  $idx
  35.                 $order[$idx] = $num
  36.         }

  37.         for ( $i = 1 ; $i -le $r ; $i++ ) {
  38.                 $num = ($i -1) *2 + 2 + ( $n / 2 )
  39.                 $x = $i
  40.                 $y = 3
  41.                 $idx = ( ($x -1) *4 ) + $y
  42.         #        Write-Host $num  $idx
  43.                 $order[$idx] = $num
  44.         }
  45.         return ( $order[1..$n] -join " ")
  46. }

  47. if ( $n % 4 -eq 0 ) {
  48.         $order = get-order $n
  49.         write-host $order
  50. }
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-1-10 22:34:53 | 显示全部楼层
回复 26# newswan


    感谢
发表于 2024-1-11 11:51:42 | 显示全部楼层
回复 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
复制代码
发表于 2024-1-11 11:53:57 | 显示全部楼层
删除第25行 echo
 楼主| 发表于 2024-1-11 14:08:21 | 显示全部楼层
回复 29# newswan


    好的 太感谢了  我试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:46 , Processed in 0.021843 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表