[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎样根据已知的文件短路径获取完整的长路径?

本帖最后由 pcl_test 于 2016-8-11 23:50 编辑

求这样的批处理:传递给他一个短文件名,返回对应的长文件名。
即:
call 长文件名.bat C:\PROGRA~1\COMMON~1\MICROS~1\DAO\dao360.dll
返回正确的长文件名:
"C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"

环境:windows XP
要求:尽量不使用第三方软件,只使用xp自带的程序。

我的实现方法:
@echo off
if "%1"=="" goto callmyself
set longpath=%~d1
set s=%~dpfxs1
set s=%s:\= %
call :getfullname %s%
echo "%longpath%"
goto :eof

:callmyself
call %0 C:\PROGRA~1\COMMON~1\MICROS~1\DAO\dao360.dll
goto :eof

:getfullname
if "%2"=="" goto :eof
if not "%3"=="" (
   
for /f "tokens=*" %%i in ('dir /ad /b "%longpath%\%2*"') do set longpath=%longpath%\%%i
   
shift
    goto
getfullname
) else (
   
for /f "tokens=*" %%i in ('dir /b "%longpath%\%2*"') do set longpath=%longpath%\%%i
   
goto :eof
)


[ 本帖最后由 dishuo 于 2008-8-18 19:50 编辑 ]

受教了!
学习之后修改如下,目前测试没有发现问题.
@echo off&setlocal enabledelayedexpansion
cls
if
"%1"=="" goto callmyself
call :getfullname %1
echo "%filepath%"
echo "%filename%"
echo "%fileext%"
pause

:getfullname
::需要 setlocal enabledelayedexpansion
::使用 %filepath%\%filename%.%fileext%
set "p=%~s1"
set "filepath=%~d1"
set "filename=%~nxs1"
set "fileext=%~x1"
for %%i in (%filepath% %filename%) do set "p=!p:%%i=!"
set "p=%p:\= %"
for %%i in (%p%) do for /f "tokens=*" %%j in ('dir /ad /b "!filepath!\%%i*"') do set "filepath=!filepath!\%%j"
for /f "tokens=*" %%i in ('dir /b "%filepath%\%filename%*"') do set "filename=%%i"
set "filename=!filename:%~x1=!
set "fileext=%fileext:.=%"
exit /b

:callmyself
call %0 C:\PROGRA~1\COMMON~1\MICROS~1\DAO\dao360.dll

[ 本帖最后由 dishuo 于 2008-8-18 22:24 编辑 ]

TOP

返回列表