[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本人为学生,之前常来本论看贴,但未能注册。
以下代码为本人原创:
  1. @echo off
  2. :main
  3. setlocal enabledelayedexpansion
  4. :: 初始化配置
  5. set "config_choice_options=:abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6. set "config_dir_order=/o:n"
  7. set "config_dir_other=/a /b"
  8. set "config_lines_per_page=10"
  9. set "config_choice_setting_1=/c%config_choice_options% /cs /n"
  10. set "config_last_page=1"
  11. set "config_next_page=4"
  12. set "config_to_page=5"
  13. set "config_back=17"
  14. set "config_file_open=15"
  15. set "config_file_exit=17"
  16. set "main_message=[!config_choice_options:~%config_last_page%,1!] 上一页   [!config_choice_options:~%config_next_page%,1!] 下一页   [!config_choice_options:~%config_to_page%,1!] 跳转到指定页   [!config_choice_options:~%config_back%,1!] 返回上级目录"
  17. set "file_options=[!config_choice_options:~%config_file_open%,1!] 打开文件   [!config_choice_options:~%config_file_exit%,1!] 返回"
  18. rem [!config_choice_options:~%%,1!]
  19. :: 加载当前目录内容
  20. :load_current_directory
  21. set "current_dir=%cd%"
  22. set /a current_page=1
  23. set /a total_pages=1
  24. set /a total_lines=0
  25. for /f "tokens=*" %%a in ('dir "%current_dir%" %config_dir_order% %config_dir_other% /-c') do (
  26.     set /a total_lines+=1
  27.     set "files[!total_lines!]=%%a"
  28. )
  29. :: 计算总页数
  30. set /a total_pages=(total_lines+config_lines_per_page-1)/config_lines_per_page
  31. goto detect_user_action
  32. REM goto show_current_page_1
  33. REM goto :eof
  34. :: 显示当前页
  35. :show_current_page_1
  36. set file_index=0
  37. :show_selected_1
  38. set /a start_line=(current_page-1)*config_lines_per_page+1
  39. set /a end_line=start_line+config_lines_per_page-1
  40. if %end_line% gtr %total_lines% set /a end_line=%total_lines%
  41. set "selectedmark="
  42. for /l %%i in (%start_line%,1,%end_line%) do (
  43.     set "file_line=!files[%%i]!"
  44. set /a current_line = %%i - %start_line% + 1
  45. if %file_index% equ %%i (
  46. set "selectedmark=---"
  47. ) else (
  48. set "selectedmark=   "
  49. )
  50. if exist "%current_dir%\!file_line!\*" (
  51.         set "this_line[!current_line!]=^|%%i^|!selectedmark!目录 - !file_line!"
  52.     ) else (
  53.         set "this_line[!current_line!]=^|%%i^|!selectedmark!文件 - !file_line!"
  54.     )
  55. )
  56. cls
  57. echo 当前目录:%current_dir%
  58. echo 当前页:%current_page% / %total_pages%
  59. for /l %%i in (1,1,%current_line%) do (
  60. echo !this_line[%%i]!
  61. )
  62. echo.
  63. REM goto detect_user_action
  64. goto :eof
  65. :show_current_page_2
  66. REM 本部分代码未完善,但以下循环理论上可以正常显示。
  67. for /f "tokens=* delims=" %%a in ('dir /b /a %config_dir_setting% ^| more +%start_line%') do (
  68.     set /a counter+=1
  69.     echo !counter!. %%a
  70. REM  skip=%start_line%
  71.     rem 这里根据文件或文件夹的类型进行标记
  72.     rem 可以使用 if exist "%%a\" (echo [DIR]) else (echo [FILE])
  73.     if !counter! equ %config_lines_per_page% goto next
  74. )
  75. goto :eof
  76. :: 捕捉用户行为
  77. :detect_user_action
  78. call :show_current_page_1
  79. echo 请选择操作:
  80. echo [1-10(0代表10)] 选择文件/目录
  81. echo %main_message%
  82. choice %config_choice_setting_1% /m "请按一下对应按键:"
  83. :: 处理用户输入
  84. set /a error_level=%ERRORLEVEL%
  85. :: 翻页操作
  86. if %error_level% equ %config_last_page% (
  87.     if %current_page% gtr 1 (
  88.         set /a current_page-=1
  89.     )
  90.     goto detect_user_action
  91. )
  92. if %error_level% equ %config_next_page% (
  93.     if %current_page% lss %total_pages% (
  94.         set /a current_page+=1
  95.     )
  96.     goto detect_user_action
  97. )
  98. if %error_level% equ %config_to_page% (
  99.    set /p "to_page=请输入要到达的页数:"
  100.     if !to_page! lss 1 (
  101. set to_page = 1
  102. )
  103. if !to_page! gtr %total_pages% (
  104. set to_page = %total_pages%
  105. )
  106. set /a current_page = to_page
  107. goto detect_user_action
  108. )
  109. :: 返回上级目录
  110. if %error_level% equ %config_back% (
  111.     cd..
  112.     goto load_current_directory
  113. )
  114. if %error_level% geq 27 (
  115.     set /a file_index = %config_lines_per_page% * %current_page% - %config_lines_per_page% + %error_level% - 26
  116.     REM if %file_index% lss %start_line% goto invalid_choice
  117.     REM if %file_index% gtr %end_line% goto invalid_choice
  118.     goto select_file_or_directory
  119. )
  120. REM :: 无效选择
  121. REM :invalid_choice
  122. echo 无效的选择,请重试...
  123. timeout /t 2 >nul
  124. goto detect_user_action
  125. :: 处理文件或文件夹选择
  126. :select_file_or_directory
  127. set "file_name=!files[%file_index%]!"
  128. if exist "%current_dir%\%file_name%\*" (
  129.     cd "%current_dir%\%file_name%"
  130.     goto load_current_directory
  131. ) else (
  132.     goto file_options
  133. )
  134. goto select_file_or_directory
  135. :: 文件操作菜单
  136. :file_options
  137. cls
  138. call :show_selected_1
  139. echo 已选择文件:[%file_index%] %file_name%
  140. echo %file_options%
  141. choice %config_choice_setting_1% /m "输入操作:"
  142. set /a error_level=%ERRORLEVEL%
  143. if %error_level% equ %config_file_open% (
  144.     start "" "%file_name%"
  145.     goto detect_user_action
  146. )
  147. if %error_level% equ %config_file_exit% (
  148.     goto detect_user_action
  149. )
  150. goto file_options
复制代码

TOP

返回列表