获取没有文件扩展名的文件的基本名称

时间:2016-02-05 21:28:20

标签: string batch-file

假设我在变量"testfile.txt"上设置了一个名为%File%的文件,我想在回显它时删除该扩展名。 Echo %File:~0,8%会以"testfile"形式显示,但我想要的是让它显示".txt"左侧的任何内容和所有内容,因为我不会总是生成包含8个字符的文件以他们的名义。

这有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:1)

是的。

for %%I in ("testfile.txt") do echo %%~nI

for %%I in ("%file%") do echo %%~nI

在cmd控制台窗口中执行help for并查看最后两页,了解有关波浪线操作的更多信息。

还有另一种方法可以实现您想要的效果,使用类似于您问题中所示尝试的子字符串替换。

set "file=testfile.txt"
echo %file:.=&rem;%

&rem;代替点。在评估变量时,批处理解释器将新替换的数据视为复合命令。由于rem后面的所有内容都被视为要忽略的注释,因此您只剩下testfile作为输出。这只适用于:

  • 您的变量值中不包含引号
  • 您的文件名只包含一个点
  • 您不会在需要延迟扩展的括号代码块(if语句或for循环)内执行此操作

答案 1 :(得分:0)

你可以试试这个:

@echo off
set "file=testfile.txt"
call :removeExtension "%file%"
echo %newFile%
pause
goto :eof

:removeExtension
set "newFile=%~n1"
goto :eof

但是,这仅在文件没有路径时才有效。如果是,您可以这样做:

@echo off
setlocal EnableDelayedExpansion
set "file=files\testfile.txt"
call :removeExtension "%file%"
echo %newFile%
pause
goto :eof

:removeExtension
set "file=%~1"
set "newFile=!file:%~x1=!"
goto :eof