返回列表 发帖

[文件管理] 批处理资源管理器

根据实际编程需要以及batcher的有奖活动特地写个批处理资源管理器,不必计较是不是真的资源管理器,只是模仿。
下面是昨晚尝试的结果:
历史记录功能可用,定位可能需要完善,其他功能有待继续开发。
@echo off&setlocal enabledelayedexpansion
::Batch Resource Management Program V1.0.1
set "input=%1"
set "rmppath=%~dp0"
set H1=%rmppath%
:rmpMenuPreview 控制台
cls
title %cd%
set rmpvar=
echo;历史记录:!H1!  !H2!  !H3!
echo;=============================================================================
::echo;打开【O】新建【W】删除【D】重命名【M】属性【R】创建快捷方式【S】关闭【C】
::echo;编辑【】剪切【】复制【】粘贴【】移动【】
::echo;查看【】图标【】排列【】刷新【】选择【】搜索【】查看【】收藏【】设置【】
echo;定位【PS】历史记录【H】帮助【Help
echo;=============================================================================
set num=0
for /f "tokens=*" %%a in ('dir /b') do set /a num+=1&echo;    !num!  %%a&set "rmpvar=%%a"
if "!rmpvar!"=="" echo;    ^<空文件夹^>
echo;
set input=
set inputs=
set /p "input=    请输入:"
if "%input%"=="" goto rmpMenuPreview
if exist "%input%" cd /d "%input%"&call :rmpHistory "%input%"
if /i "%input%"=="Help" call :rmpHelp&goto rmpMenuPreview
if /i "%input:~0,1%"=="H" if "%input:~2,2%"=="" call :rmpHistoryBack&goto rmpMenuPreview
for /f "tokens=1,2" %%a in ("%input%") do if "%%b"=="" (set input=%%a) else (set input=%%a&set inputs=%%b)
echo;
call :rmpLinePosition
echo;
echo;=============================================================================
echo;    ^<The End^>
pause>nul
goto rmpMenuPreview
:rmpLinePosition 处理类型
set num=0
for /f "tokens=*" %%a in ('dir /b') do set /a num+=1&if !num!==!input! (
    echo;    !num!  "%%~a"
    echo;=============================================================================
    if exist "%%~a" (
        if /i %%~xa==.txt  more "%%~a"
        if /i %%~xa==.bat  more "%%~a"
        if /i %%~xa==.cmd  more "%%~a"
        if exist "%%~a" (
            dir /b /a:d "%%~a">nul 2>nul&&((cd /d "%%~a"&call :rmpHistory "%cd%\%%~a"&if not "!inputs!"=="" call :rmpOperationOption "%cd%\%%~na")&goto rmpMenuPreview)||(if not "!inputs!"=="" (call :rmpOperationOption "%cd%\%%~a") else (start "" "%%~a"))
        )
    ) else echo;    "%%~a"
)
goto :eof
:rmpOperationOption 操作设置
echo "%cd%"  "%~1"
if /i "!inputs!"=="PS" Explorer /select,"%~1"
goto :eof
:rmpHelp 帮助信息
cls
echo;=============================================================================
echo;
echo;    基本用法:输入命令或序号执行相应内容
echo;    复合操作【数字+操作】如定位:5 PS
echo;    历史操作【H】如:H2
echo;
echo;=============================================================================
pause>nul
goto :eof
:rmpHistory 历史记录项目设置
for /f %%a in ("%1") do (
    set H9=!H8!
    set H8=!H7!
    set H7=!H6!
    set H6=!H5!
    set H5=!H4!
    set H4=!H3!
    set H3=!H2!
    set H2=!H1!
    set H1=%%~a
)
goto :eof
:rmpHistoryBack 获得历史记录内容
set num=0
if /i "!input!"=="H" (
    echo;&echo;&echo;    历史记录:
    echo;    0  %rmppath%  ^<本程序位置^>
)
for /l %%a in (1,1,9) do (
    set /a num+=1
    if /i "!input!"=="H" echo;    !num!  !H%%a!
    if /i !input!==H%%a cd /d !H%%a!&goto :eof
)
echo;
set num=0
set input=
set /p "input=    请输入:"
if /i "!input!"=="" goto rmpMenuPreview
for /l %%a in (1,1,9) do (
    set /a num+=1
    if /i !input!==0 cd /d %rmppath%&goto :eof
    if /i !input!==%%a cd /d !H%%a!&goto :eof
)
goto rmpMenuPreview
tree /f
pause
COPY
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

很不错了哦

TOP

它不能打开LNK

TOP

本人为学生,之前常来本论看贴,但未能注册。
以下代码为本人原创:
@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_optionsCOPY

TOP

返回列表