假设我在变量"testfile.txt"
上设置了一个名为%File%
的文件,我想在回显它时删除该扩展名。 Echo %File:~0,8%
会以"testfile"
形式显示,但我想要的是让它显示".txt"
左侧的任何内容和所有内容,因为我不会总是生成包含8个字符的文件以他们的名义。
这有一个简单的解决方案吗?
答案 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