Board logo

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

作者: qd2024    时间: 2024-1-10 06:41     标题: 【已解决】多个BAT代码合并,指定关键字执行具体代码

本帖最后由 qd2024 于 2024-1-10 22:34 编辑

链接:https://pan.baidu.com/s/10Vn3c47vlF-MApoilXyOsQ?pwd=al1f
提取码:al1f
--来自百度网盘超级会员V10的分享


我有若干个BAt文件,
小册子P16.bat  小册子P32.bat  小册子P36.bat  小册子P48.bat  小册子P56.bat 小册子P64.bat  小册子P72.bat
怎样把它们和并到一个bat里面,
我想给是不是可以给每段代码指定个名字,如 小册子P16.bat 就叫 16   小册子P32.bat 就叫 32
当我运行这个合并后的BAT里,让我输入文字
我输入16回车 就执行小册子P16.bat
我输入32回车 就执行小册子P32.bat

名称的关键字就用数字吧,这样方便。

批处理执行后,删除自己。

辛苦了 谢谢
作者: ShowCode    时间: 2024-1-10 08:46

回复 1# qd2024


Run-V1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. :GetInput
  4. echo [16] 小册子P16.bat
  5. echo [32] 小册子P32.bat
  6. echo [36] 小册子P36.bat
  7. echo [48] 小册子P48.bat
  8. echo [56] 小册子P56.bat
  9. echo [64] 小册子P64.bat
  10. echo [72] 小册子P72.bat
  11. set "MyInput="
  12. set /p "MyInput=请输入选项:"
  13. if "%MyInput%" == "16" (
  14.     call 小册子P16.bat
  15. ) else if "%MyInput%" == "32" (
  16.     call 小册子P32.bat
  17. ) else if "%MyInput%" == "36" (
  18.     call 小册子P36.bat
  19. ) else if "%MyInput%" == "48" (
  20.     call 小册子P48.bat
  21. ) else if "%MyInput%" == "56" (
  22.     call 小册子P56.bat
  23. ) else if "%MyInput%" == "64" (
  24.     call 小册子P64.bat
  25. ) else if "%MyInput%" == "72" (
  26.     call 小册子P72.bat
  27. ) else (
  28.     goto :GetInput
  29. )
  30. pause
复制代码

作者: aloha20200628    时间: 2024-1-10 10:33

本帖最后由 aloha20200628 于 2024-1-10 11:09 编辑


假设要执行的批处理脚本 *.bat 均在目录 d:\bat
测试代码如下存为 test.cmd
  1. @echo off &setlocal enabledelayedexpansion
  2. set "batDir=d:\bat" &cd /d "!batDir!" || exit/b
  3. for /f "delims=" %%B in ('dir /b/a-d *.bat') do (set/a "n+=1" &set "_!n!=%%~nxB" &echo,[!n!] %%~nxB)
  4. set "batF=" &set/p "batF=选择批处理脚本序号:"
  5. if not defined batF exit/b
  6. for %%b in (!batF!) do (call "!_%%b!")
  7. endlocal &exit/b
复制代码

作者: qixiaobin0715    时间: 2024-1-10 10:38

本帖最后由 qixiaobin0715 于 2024-1-10 10:44 编辑

感觉楼主没想明白,又是运行又是执行又是删除,不觉得麻烦吗?
如果同样页数对应关系相同的话,可以把所有用到的不同总页码的对应关系保存到一个文本中,使用批处理文件调用即可。
作者: qd2024    时间: 2024-1-10 12:40

本帖最后由 qd2024 于 2024-1-10 12:44 编辑

回复 2# ShowCode
回复 3# aloha20200628

辛苦了,谢谢

我是想把小册子P16.bat  小册子P32.bat  小册子P36.bat  小册子P48.bat  小册子P56.bat 小册子P64.bat  小册子P72.bat  里面的代码都复制到一个文件里,

然后运行这个bat ,输入关键字回车运行,或则列出菜单我选择也行。

帮我再调整一下 谢谢。
  1. @echo off&color f1&title 改文件名
  2. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  3. if exist "%%i.*" ren "%%i.*" "%%j.*")
  4. echo.改名结束&ping 127.1>nul&exit -
  5. 小册子_1 08
  6. 小册子_2 09
  7. 小册子_3 10
  8. 小册子_4 07
  9. 小册子_5 06
  10. 小册子_6 11
  11. 小册子_7 12
  12. 小册子_8 05
  13. 小册子_9 04
  14. 小册子_10 13
  15. 小册子_11 14
  16. 小册子_12 03
  17. 小册子_13 02
  18. 小册子_14 15
  19. 小册子_15 16
  20. 小册子_16 01
  21. @echo off&color f1&title 改文件名
  22. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  23. if exist "%%i.*" ren "%%i.*" "%%j.*")
  24. echo.改名结束&ping 127.1>nul&exit -
  25. 小册子_1 16
  26. 小册子_2 17
  27. 小册子_3 18
  28. 小册子_4 15
  29. 小册子_5 14
  30. 小册子_6 19
  31. 小册子_7 20
  32. 小册子_8 13
  33. 小册子_9 12
  34. 小册子_10 21
  35. 小册子_11 22
  36. 小册子_12 11
  37. 小册子_13 10
  38. 小册子_14 23
  39. 小册子_15 24
  40. 小册子_16 9
  41. 小册子_17 8
  42. 小册子_18 25
  43. 小册子_19 26
  44. 小册子_20 7
  45. 小册子_21 6
  46. 小册子_22 27
  47. 小册子_23 28
  48. 小册子_24 5
  49. 小册子_25 4
  50. 小册子_26 29
  51. 小册子_27 30
  52. 小册子_28 3
  53. 小册子_29 2
  54. 小册子_30 31
  55. 小册子_31 32
  56. 小册子_32 1
  57. @echo off&color f1&title 改文件名
  58. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  59. if exist "%%i.*" ren "%%i.*" "%%j.*")
  60. echo.改名结束&ping 127.1>nul&exit -
  61. 小册子1 16
  62. 小册子2 17
  63. 小册子3 18
  64. 小册子4 15
  65. 小册子5 14
  66. 小册子6 19
  67. 小册子7 20
  68. 小册子8 13
  69. 小册子9 12
  70. 小册子10 21
  71. 小册子11 22
  72. 小册子12 11
  73. 小册子13 10
  74. 小册子14 23
  75. 小册子15 24
  76. 小册子16 9
  77. 小册子17 8
  78. 小册子18 25
  79. 小册子19 26
  80. 小册子20 7
  81. 小册子21 6
  82. 小册子22 27
  83. 小册子23 28
  84. 小册子24 5
  85. 小册子25 4
  86. 小册子26 29
  87. 小册子27 30
  88. 小册子28 3
  89. 小册子29 2
  90. 小册子30 31
  91. 小册子31 32
  92. 小册子32 1
  93. 小册子33 0
  94. 小册子34 35
  95. 小册子35 36
  96. 小册子36 0
  97. @echo off&color f1&title 改文件名
  98. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  99. if exist "%%i.*" ren "%%i.*" "%%j.*")
  100. echo.改名结束&ping 127.1>nul&exit -
  101. 小册子_1 24
  102. 小册子_2 25
  103. 小册子_3 26
  104. 小册子_4 23
  105. 小册子_5 22
  106. 小册子_6 27
  107. 小册子_7 28
  108. 小册子_8 21
  109. 小册子_9 20
  110. 小册子_10 29
  111. 小册子_11 30
  112. 小册子_12 19
  113. 小册子_13 18
  114. 小册子_14 31
  115. 小册子_15 32
  116. 小册子_16 17
  117. 小册子_17 16
  118. 小册子_18 33
  119. 小册子_19 34
  120. 小册子_20 15
  121. 小册子_21 14
  122. 小册子_22 35
  123. 小册子_23 36
  124. 小册子_24 13
  125. 小册子_25 12
  126. 小册子_26 37
  127. 小册子_27 38
  128. 小册子_28 11
  129. 小册子_29 10
  130. 小册子_30 39
  131. 小册子_31 40
  132. 小册子_32 9
  133. 小册子_33 8
  134. 小册子_34 41
  135. 小册子_35 42
  136. 小册子_36 7
  137. 小册子_37 6
  138. 小册子_38 43
  139. 小册子_39 44
  140. 小册子_40 5
  141. 小册子_41 4
  142. 小册子_42 45
  143. 小册子_43 46
  144. 小册子_44 3
  145. 小册子_45 2
  146. 小册子_46 47
  147. 小册子_47 48
  148. 小册子_48 1
  149. @echo off&color f1&title 改文件名
  150. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  151. if exist "%%i.*" ren "%%i.*" "%%j.*")
  152. echo.改名结束&ping 127.1>nul&exit -
  153. 小册子_1 28
  154. 小册子_2 29
  155. 小册子_3 30
  156. 小册子_4 27
  157. 小册子_5 26
  158. 小册子_6 31
  159. 小册子_7 32
  160. 小册子_8 25
  161. 小册子_9 24
  162. 小册子_10 33
  163. 小册子_11 34
  164. 小册子_12 23
  165. 小册子_13 22
  166. 小册子_14 35
  167. 小册子_15 36
  168. 小册子_16 21
  169. 小册子_17 20
  170. 小册子_18 37
  171. 小册子_19 38
  172. 小册子_20 19
  173. 小册子_21 18
  174. 小册子_22 39
  175. 小册子_23 40
  176. 小册子_24 17
  177. 小册子_25 16
  178. 小册子_26 41
  179. 小册子_27 42
  180. 小册子_28 15
  181. 小册子_29 14
  182. 小册子_30 43
  183. 小册子_31 44
  184. 小册子_32 13
  185. 小册子_33 12
  186. 小册子_34 45
  187. 小册子_35 46
  188. 小册子_36 11
  189. 小册子_37 10
  190. 小册子_38 47
  191. 小册子_39 48
  192. 小册子_40 9
  193. 小册子_41 8
  194. 小册子_42 49
  195. 小册子_43 50
  196. 小册子_44 7
  197. 小册子_45 6
  198. 小册子_46 51
  199. 小册子_47 52
  200. 小册子_48 5
  201. 小册子_49 4
  202. 小册子_50 53
  203. 小册子_51 54
  204. 小册子_52 3
  205. 小册子_53 2
  206. 小册子_54 55
  207. 小册子_55 56
  208. 小册子_56 1
  209. @echo off&color f1&title 改文件名
  210. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  211. if exist "%%i.*" ren "%%i.*" "%%j.*")
  212. echo.改名结束&ping 127.1>nul&exit -
  213. 小册子_1 32
  214. 小册子_2 33
  215. 小册子_3 34
  216. 小册子_4 31
  217. 小册子_5 30
  218. 小册子_6 35
  219. 小册子_7 36
  220. 小册子_8 29
  221. 小册子_9 28
  222. 小册子_10 37
  223. 小册子_11 38
  224. 小册子_12 27
  225. 小册子_13 26
  226. 小册子_14 39
  227. 小册子_15 40
  228. 小册子_16 25
  229. 小册子_17 24
  230. 小册子_18 41
  231. 小册子_19 42
  232. 小册子_20 23
  233. 小册子_21 22
  234. 小册子_22 43
  235. 小册子_23 44
  236. 小册子_24 21
  237. 小册子_25 20
  238. 小册子_26 45
  239. 小册子_27 46
  240. 小册子_28 19
  241. 小册子_29 18
  242. 小册子_30 47
  243. 小册子_31 48
  244. 小册子_32 17
  245. 小册子_33 16
  246. 小册子_34 49
  247. 小册子_35 50
  248. 小册子_36 15
  249. 小册子_37 14
  250. 小册子_38 51
  251. 小册子_39 52
  252. 小册子_40 13
  253. 小册子_41 12
  254. 小册子_42 53
  255. 小册子_43 54
  256. 小册子_44 11
  257. 小册子_45 10
  258. 小册子_46 55
  259. 小册子_47 56
  260. 小册子_48 9
  261. 小册子_49 8
  262. 小册子_50 57
  263. 小册子_51 58
  264. 小册子_52 7
  265. 小册子_53 6
  266. 小册子_54 59
  267. 小册子_55 60
  268. 小册子_56 5
  269. 小册子_57 4
  270. 小册子_58 61
  271. 小册子_59 62
  272. 小册子_60 3
  273. 小册子_61 2
  274. 小册子_62 63
  275. 小册子_63 64
  276. 小册子_64 1
  277. @echo off&color f1&title 改文件名
  278. for /f "tokens=1,2" %%i in ('more +4 "%~0"')do (
  279. if exist "%%i.*" ren "%%i.*" "%%j.*")
  280. echo.改名结束&ping 127.1>nul&exit -
  281. 小册子_1 36
  282. 小册子_2 37
  283. 小册子_3 38
  284. 小册子_4 35
  285. 小册子_5 34
  286. 小册子_6 39
  287. 小册子_7 40
  288. 小册子_8 33
  289. 小册子_9 32
  290. 小册子_10 41
  291. 小册子_11 42
  292. 小册子_12 31
  293. 小册子_13 30
  294. 小册子_14 43
  295. 小册子_15 44
  296. 小册子_16 29
  297. 小册子_17 28
  298. 小册子_18 45
  299. 小册子_19 46
  300. 小册子_20 27
  301. 小册子_21 26
  302. 小册子_22 47
  303. 小册子_23 48
  304. 小册子_24 25
  305. 小册子_25 24
  306. 小册子_26 49
  307. 小册子_27 50
  308. 小册子_28 23
  309. 小册子_29 22
  310. 小册子_30 51
  311. 小册子_31 52
  312. 小册子_32 21
  313. 小册子_33 20
  314. 小册子_34 53
  315. 小册子_35 54
  316. 小册子_36 19
  317. 小册子_37 18
  318. 小册子_38 55
  319. 小册子_39 56
  320. 小册子_40 17
  321. 小册子_41 16
  322. 小册子_42 57
  323. 小册子_43 58
  324. 小册子_44 15
  325. 小册子_45 14
  326. 小册子_46 59
  327. 小册子_47 60
  328. 小册子_48 13
  329. 小册子_49 12
  330. 小册子_50 61
  331. 小册子_51 62
  332. 小册子_52 11
  333. 小册子_53 10
  334. 小册子_54 63
  335. 小册子_55 64
  336. 小册子_56 9
  337. 小册子_57 8
  338. 小册子_58 65
  339. 小册子_59 66
  340. 小册子_60 7
  341. 小册子_61 6
  342. 小册子_62 67
  343. 小册子_63 68
  344. 小册子_64 5
  345. 小册子_65 4
  346. 小册子_66 69
  347. 小册子_67 70
  348. 小册子_68 3
  349. 小册子_69 2
  350. 小册子_70 71
  351. 小册子_71 72
  352. 小册子_72 1
复制代码

作者: newswan    时间: 2024-1-10 15:03

本帖最后由 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. )
复制代码

作者: czjt1234    时间: 2024-1-10 16:35

先检测如果有  小册子_72  文件,就运行72.bat
再检测如果有  小册子_36  文件,就运行36.bat
......
再检测如果有  小册子_16  文件,就运行16.bat
作者: newswan    时间: 2024-1-10 17:47

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

作者: qd2024    时间: 2024-1-10 18:02

回复 6# newswan

我理解这个思路是不是判断当前目录下有多少个文件,然后就执行order对应行的规则, 我如图设置了,应该是不对,没有成功
文件我上传到百度了,帮忙再分析一下。
   

链接:https://pan.baidu.com/s/1Dpuins4sRblfVYn7RMM_zQ?pwd=yuj1
提取码:yuj1
--来自百度网盘超级会员V10的分享
作者: newswan    时间: 2024-1-10 18:06

回复 9# qd2024


    首先,不能把批处理放图片文件夹里,图片文件夹作为参数 发给批处理
作者: qd2024    时间: 2024-1-10 18:20

回复 10# newswan


   
     我把图片放文件夹里 也不行 机器死机了
作者: newswan    时间: 2024-1-10 18:24

把文件夹拖到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
复制代码

作者: newswan    时间: 2024-1-10 18:28

  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
复制代码

作者: qd2024    时间: 2024-1-10 19:48

回复 12# newswan
回复 13# newswan

我把12、13楼的代码分别放在2个BAt里了  有提示窗口  但是没有改变文件名 谢谢
   

作者: newswan    时间: 2024-1-10 20:10

回复 14# qd2024


    如果命令显示正确, echo ren 改成 ren
作者: qd2024    时间: 2024-1-10 20:15

回复 15# newswan


    好的  12、13楼有什么区别
作者: newswan    时间: 2024-1-10 20:19

你对比一下啊
作者: qd2024    时间: 2024-1-10 20:20

回复 15# newswan

改前 有对比  改后 系统找不到文件

作者: newswan    时间: 2024-1-10 20:35

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

作者: newswan    时间: 2024-1-10 20:49

加了判断  前面有没有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
复制代码

作者: qd2024    时间: 2024-1-10 21:29

本帖最后由 qd2024 于 2024-1-10 21:32 编辑

回复 20# newswan

应该会有3位数的情况    不足3位的用0补位
作者: newswan    时间: 2024-1-10 21:30

页码规律,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
复制代码

作者: newswan    时间: 2024-1-10 21:33

回复 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!)
复制代码

作者: qd2024    时间: 2024-1-10 21:44

回复 22# newswan


    这个怎么用
作者: qd2024    时间: 2024-1-10 21:51

回复 23# newswan


    能不能把"_"前面的汉字忽略了,不管是什么汉字都行,只对"_"后面的数字有效
作者: newswan    时间: 2024-1-10 21:53

保存为 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. }
复制代码

作者: qd2024    时间: 2024-1-10 22:34

回复 26# newswan


    感谢
作者: newswan    时间: 2024-1-11 11:51

回复 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
复制代码

作者: newswan    时间: 2024-1-11 11:53

删除第25行 echo
作者: qd2024    时间: 2024-1-11 14:08

回复 29# newswan


    好的 太感谢了  我试试
作者: newswan    时间: 2024-1-14 20:58

调用
  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 ' '
复制代码

作者: qd2024    时间: 2024-1-19 09:45

回复 28# newswan

麻烦再帮我看下,25楼的代码已经帮我实现了快速排序的问题,我想把25楼代码排序后的PDF文件合并成一个文件,合并过程中想出现对话框输入合并后PDF文件的文件名(如果不行就用当前文件夹名),合并后自动删除其他文件,只保留合并后的一个文件。
我在站内找了下面的代码,但是我不能把它们合并到一起,谢谢。
下面是导出的原始文件。
链接:https://pan.baidu.com/s/1UCZUJfLhuIWzLK4O68tDzw?pwd=ea19
提取码:ea19
--来自百度网盘超级会员V10的分享


回复 5# Batcher
  1. @echo off
  2. REM 1、下载命令行工具PDFtk
  3. REM http://bcn.bathome.net/s/tool/index.html?key=PDFtk
  4. REM 2、根据自己电脑实际安装路径设置以下临时环境变量
  5. set "path=C:\Program Files (x86)\PDFtk Server\bin;%path%"
  6. cd /d "%~dp0"
  7. for /f "delims=" %%i in ('dir /b /ad') do (
  8.     pushd "%%i"
  9.     echo 正在处理文件夹:%%i
  10.     pdftk.exe *.pdf cat output "%%~nxi.pdf"
  11.     popd
  12. )
  13. pause
复制代码

作者: qd2024    时间: 2024-1-20 17:46

回复 28# newswan


    求助 在32楼 谢谢
作者: newswan    时间: 2024-1-20 22:24

本帖最后由 newswan 于 2024-1-20 22:28 编辑

回复 33# qd2024

28楼
插入 28 行 popd 之前
使用用文件夹名作为pdf文件名
  1. echo pdftk.exe *.pdf cat output "%folder%.pdf"
复制代码
pdftk 没用过,如果正确,删除 echo
作者: newswan    时间: 2024-1-20 22:54

来自 ai

创建一个包含要合并的PDF文件名的文本文件,每个文件名占一行。例如,你可以创建一个名为filelist.txt的文本文件,其中包含要合并的PDF文件名列表,如下所示:
  1. file1.pdf
  2. file2.pdf
  3. file3.pdf
  4. ...
复制代码
使用PDFTK命令来读取文件列表进行合并。命令行如下:
  1. pdftk @filelist.txt cat output merged.pdf
复制代码
在这个命令中,@filelist.txt表示告诉PDFTK命令要从filelist.txt文件中读取文件名列表进行合并。cat output merged.pdf表示将合并后的PDF文件输出为merged.pdf。
作者: newswan    时间: 2024-1-20 22:59

这种方式也可以,不用改名
  1. pdftk 1.pdf 2.pdf 3.pdf .... cat output merged.pdf
复制代码

作者: qd2024    时间: 2024-1-21 07:35

回复 36# newswan


    辛苦了 感谢
作者: qd2024    时间: 2024-1-21 08:42

回复 36# newswan


    再请教 一下 如何在PDF 合并后 删除 01 02 03……这样名的PDF  只保留合并后的PDF文件
作者: newswan    时间: 2024-1-21 10:47

回复 38# qd2024

比较好的办法是,把合并后的文件放到其他地方,..\ 或者 x:\xxx\pdf\
  1. echo pdftk.exe *.pdf cat output "..\%folder%.pdf"
复制代码
最后删除整个目录
在popd之后插入
  1. rm /s /q %folder%
复制代码

作者: qd2024    时间: 2024-1-21 11:12

回复 39# newswan


    明白了  感谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2