批处理如何提取文件位置和文件名 不包括后缀

比如我已经得到一个文件路径
C:\abc\file1.abc 现在我要将这个路径中得到C:\abc\file1这个字符串就可以 我想知道怎么控制取得 最好是能有一个完整答案 在该目录下面 建立一个同名文件但是后缀不一样
例如知道文件C:\abc\file1.abc 我要建立一个C:\abc\file1.xyz这样一个文件 该怎么写批处理
先悬赏50分 回答好可用好理解 就再加50分

请参考:

@echo off
set str1=C:\abc\file1.abc
call :show %str1%
echo %str2%

pause
goto :eof

:show
set str2=%~dpn1

简要说明:对于变量%0~%9及for里使用的%i这样的变量,可以有以下的语法:
     ~I         - 删除任何引号("),扩充 %I
     %~fI        - 将 %I 扩充到一个完全合格的路径名
     %~dI        - 仅将 %I 扩充到一个驱动器号
     %~pI        - 仅将 %I 扩充到一个路径
     %~nI        - 仅将 %I 扩充到一个文件名
     %~xI        - 仅将 %I 扩充到一个文件扩展名
     %~sI        - 扩充的路径只含有短名
     %~aI        - 将 %I 扩充到文件的文件属性
     %~tI        - 将 %I 扩充到文件的日期/时间
     %~zI        - 将 %I 扩充到文件的大小
以上的结果是可以组合的。我们可以通过"%~dpn"这样形式的组合获取一个路径形式的变量的路径及文件名的组合。

在这里,首先我假设"C:\abc\file1.abc"已经在一个变量里面,因为调用它使用的是"%%"的格式,不能扩充,所以我们需要使用call调用一段代码来将它转换成%1的形式。所以你看到了"call :show %str1%" 这一句,通过这里调用call标签后的语句。

另外一个需要注意的是在被调用的":show"标签前面是一句"goto :eof",表示批处理运行至此跳转至文件末尾(也就是退出程序),后面的":show"标签就不会运行了,

猜你喜欢

转载自mysuperbaby.iteye.com/blog/1390283