本人为学生,之前常来本论看贴,但未能注册。
以下代码为本人原创:- @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
- REM goto show_current_page_1
- REM goto :eof
-
- :: 显示当前页
- :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.
- REM goto detect_user_action
- goto :eof
-
- :show_current_page_2
- REM 本部分代码未完善,但以下循环理论上可以正常显示。
- for /f "tokens=* delims=" %%a in ('dir /b /a %config_dir_setting% ^| more +%start_line%') do (
- set /a counter+=1
- echo !counter!. %%a
- REM skip=%start_line%
- rem 这里根据文件或文件夹的类型进行标记
- rem 可以使用 if exist "%%a\" (echo [DIR]) else (echo [FILE])
- 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
- REM if %file_index% lss %start_line% goto invalid_choice
- REM if %file_index% gtr %end_line% goto invalid_choice
-
- goto select_file_or_directory
- )
- REM :: 无效选择
- REM :invalid_choice
- 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_options
复制代码
|