CMD 解析 文件路径字符串¶
- 完美支持空格路径
- 完善输入校验
- 禁止直接回车空输入
- 自动去除首尾双引号
演示型¶
path_parser_cli.bat
@echo off
chcp 65001
title 文件路径拆分工具
:: 开启变量延迟,处理特殊输入
setlocal enabledelayedexpansion
:input
cls
set "var="
set /p "var=请输入文件的完整路径/名称(支持含空格路径):"
:: 校验:禁止空输入
if not defined var (
echo ⚠️ 输入不能为空,请重新输入!
pause
goto input
)
:: 校验:去除首尾双引号(处理输入自带引号的情况)
if "!var:~0,1!"=="""" set "var=!var:~1!"
if "!var:~-1!"=="""" set "var=!var:~0,-1!"
:: 校验:自动给带空格内容加引号,兼容参数传递
set "temp_var=!var!"
if "!temp_var: =!" neq "!temp_var!" set "temp_var="!temp_var!""
:: 调用子过程
call :extract !temp_var!
pause
endlocal
exit /b
:extract
echo.
echo ========== 拆分结果 ==========
:: 处理参数扩展,兼容引号
set "full_path=%~1"
:: 输出各部分,处理空值提示
set "dir_path=%~dp1"
if defined dir_path (echo 📂 所在目录:!dir_path!) else (echo 📂 所在目录:[无])
set "drive=%~d1"
if defined drive (echo 💿 所在盘符:!drive!) else (echo 💿 所在盘符:[无])
set "file_name=%~n1"
if defined file_name (echo 📄 纯文件名:!file_name!) else (echo 📄 纯文件名:[无])
set "ext_name=%~x1"
if defined ext_name (echo 🔖 扩展名 :!ext_name!) else (echo 🔖 扩展名 :[无])
echo ==============================
goto :eof
模块型¶
path_parser_lib.bat
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
:: ==============================
:: path_parser.bat
:: 文件路径解析工具
::
:: 用法1(交互):
:: path_parser.bat
::
:: 用法2(外部调用):
:: call path_parser.bat "xxx.cpp"
::
:: 返回变量:
:: PARSER_FULLPATH
:: PARSER_DIR
:: PARSER_DRIVE
:: PARSER_FILENAME
:: PARSER_EXT
:: ==============================
:: 如果带参数,则直接解析
if not "%~1"=="" (
set "INPUT_PATH=%~1"
goto parse
)
:: ===== 交互输入 =====
:input
cls
set "INPUT_PATH="
set /p "INPUT_PATH=请输入文件完整路径:"
if not defined INPUT_PATH (
echo 输入不能为空
pause
goto input
)
:: 去除首尾引号
if "!INPUT_PATH:~0,1!"=="""" set "INPUT_PATH=!INPUT_PATH:~1!"
if "!INPUT_PATH:~-1!"=="""" set "INPUT_PATH=!INPUT_PATH:~0,-1!"
:parse
:: ========== 解析 ==========
set "PARSER_FULLPATH=%~f1"
for %%i in ("%INPUT_PATH%") do (
set "PARSER_DIR=%%~dpi"
set "PARSER_DRIVE=%%~di"
set "PARSER_FILENAME=%%~ni"
set "PARSER_EXT=%%~xi"
)
:: ===== 输出结果 =====
echo.
echo ========= 解析结果 =========
echo 完整路径:!PARSER_FULLPATH!
echo 所在目录:!PARSER_DIR!
echo 所在盘符:!PARSER_DRIVE!
echo 文件名 :!PARSER_FILENAME!
echo 扩展名 :!PARSER_EXT!
echo ============================
:: ===== 返回变量给调用者 =====
endlocal & (
set "PARSER_FULLPATH=%PARSER_FULLPATH%"
set "PARSER_DIR=%PARSER_DIR%"
set "PARSER_DRIVE=%PARSER_DRIVE%"
set "PARSER_FILENAME=%PARSER_FILENAME%"
set "PARSER_EXT=%PARSER_EXT%"
)
exit /b