| @echo off |
| :main |
| setlocal enabledelayedexpansion |
| |
| :: 初始化配置 |
| set "config_choice_options=:abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| set "config_dir_order=/o:n" |
| set "config_dir_other=/a /b" |
| set "config_lines_per_page=10" |
| set "config_choice_setting_1=/c%config_choice_options% /cs /n" |
| set "config_last_page=1" |
| set "config_next_page=4" |
| set "config_to_page=5" |
| set "config_back=17" |
| set "config_file_open=15" |
| set "config_file_exit=17" |
| |
| 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!] 返回上级目录" |
| set "file_options=[!config_choice_options:~%config_file_open%,1!] 打开文件 [!config_choice_options:~%config_file_exit%,1!] 返回" |
| |
| rem [!config_choice_options:~%%,1!] |
| |
| :: 加载当前目录内容 |
| :load_current_directory |
| set "current_dir=%cd%" |
| set /a current_page=1 |
| set /a total_pages=1 |
| set /a total_lines=0 |
| for /f "tokens=*" %%a in ('dir "%current_dir%" %config_dir_order% %config_dir_other% /-c') do ( |
| set /a total_lines+=1 |
| set "files[!total_lines!]=%%a" |
| ) |
| |
| :: 计算总页数 |
| set /a total_pages=(total_lines+config_lines_per_page-1)/config_lines_per_page |
| goto detect_user_action |
| |
| |
| |
| :: 显示当前页 |
| :show_current_page_1 |
| set file_index=0 |
| :show_selected_1 |
| |
| set /a start_line=(current_page-1)*config_lines_per_page+1 |
| set /a end_line=start_line+config_lines_per_page-1 |
| if %end_line% gtr %total_lines% set /a end_line=%total_lines% |
| set "selectedmark=" |
| for /l %%i in (%start_line%,1,%end_line%) do ( |
| set "file_line=!files[%%i]!" |
| set /a current_line = %%i - %start_line% + 1 |
| if %file_index% equ %%i ( |
| set "selectedmark=---" |
| ) else ( |
| set "selectedmark= " |
| ) |
| if exist "%current_dir%\!file_line!\*" ( |
| set "this_line[!current_line!]=^|%%i^|!selectedmark!目录 - !file_line!" |
| ) else ( |
| set "this_line[!current_line!]=^|%%i^|!selectedmark!文件 - !file_line!" |
| ) |
| ) |
| cls |
| echo 当前目录:%current_dir% |
| echo 当前页:%current_page% / %total_pages% |
| for /l %%i in (1,1,%current_line%) do ( |
| echo !this_line[%%i]! |
| ) |
| echo. |
| |
| goto :eof |
| |
| :show_current_page_2 |
| |
| for /f "tokens=* delims=" %%a in ('dir /b /a %config_dir_setting% ^| more +%start_line%') do ( |
| set /a counter+=1 |
| echo !counter!. %%a |
| |
| |
| |
| if !counter! equ %config_lines_per_page% goto next |
| ) |
| |
| goto :eof |
| :: 捕捉用户行为 |
| :detect_user_action |
| call :show_current_page_1 |
| echo 请选择操作: |
| echo [1-10(0代表10)] 选择文件/目录 |
| echo %main_message% |
| choice %config_choice_setting_1% /m "请按一下对应按键:" |
| |
| :: 处理用户输入 |
| set /a error_level=%ERRORLEVEL% |
| |
| :: 翻页操作 |
| if %error_level% equ %config_last_page% ( |
| if %current_page% gtr 1 ( |
| set /a current_page-=1 |
| ) |
| goto detect_user_action |
| ) |
| if %error_level% equ %config_next_page% ( |
| if %current_page% lss %total_pages% ( |
| set /a current_page+=1 |
| ) |
| goto detect_user_action |
| ) |
| if %error_level% equ %config_to_page% ( |
| set /p "to_page=请输入要到达的页数:" |
| if !to_page! lss 1 ( |
| set to_page = 1 |
| ) |
| if !to_page! gtr %total_pages% ( |
| set to_page = %total_pages% |
| ) |
| set /a current_page = to_page |
| goto detect_user_action |
| ) |
| :: 返回上级目录 |
| if %error_level% equ %config_back% ( |
| cd.. |
| goto load_current_directory |
| ) |
| if %error_level% geq 27 ( |
| set /a file_index = %config_lines_per_page% * %current_page% - %config_lines_per_page% + %error_level% - 26 |
| |
| |
| |
| goto select_file_or_directory |
| ) |
| |
| |
| echo 无效的选择,请重试... |
| timeout /t 2 >nul |
| goto detect_user_action |
| |
| :: 处理文件或文件夹选择 |
| :select_file_or_directory |
| set "file_name=!files[%file_index%]!" |
| if exist "%current_dir%\%file_name%\*" ( |
| cd "%current_dir%\%file_name%" |
| goto load_current_directory |
| ) else ( |
| goto file_options |
| ) |
| goto select_file_or_directory |
| |
| |
| :: 文件操作菜单 |
| :file_options |
| cls |
| call :show_selected_1 |
| echo 已选择文件:[%file_index%] %file_name% |
| echo %file_options% |
| choice %config_choice_setting_1% /m "输入操作:" |
| set /a error_level=%ERRORLEVEL% |
| |
| if %error_level% equ %config_file_open% ( |
| start "" "%file_name%" |
| goto detect_user_action |
| ) |
| if %error_level% equ %config_file_exit% ( |
| goto detect_user_action |
| ) |
| goto file_optionsCOPY |