如何删除保存在批处理变量中的文件名的扩展名?

时间:2013-04-11 23:19:11

标签: variables for-loop batch-file filenames

首先是我的批处理脚本代码段(不工作):

set _WRx32=wrar420.exe
set _WRx64=winrar-x64-420.exe
set _WRLNG=rarlng.rar

FOR %%f IN (_WRLNG, _WRx64, _WRx32) do set "%%f"="%%~nf"

[对于列表中的每个变量名称(!)从变量内容中删除扩展名(!)   并保存回相同的变量]

问题:如何删除保存在文件名中的文件名的扩展名 变量_WRLNG,_WRx64,_WRx32并保存此文件名(不带扩展名) 回到相同的变量??

我需要这样的东西:set var =%var~n%但这不起作用。而在FOR循环中,我不知道 如何将名称从(...变量名...)列表转换为相应的变量 所以我可以在其上应用参数扩展名“~n”,“~nf”等。

任何人都可以帮助我吗?

由于

3 个答案:

答案 0 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

set _WRx32=wrar420.exe
set _WRx64=winrar-x64-420.exe
set _WRLNG=rarlng.rar

FOR %%f IN (_WRLNG, _WRx64, _WRx32) do (
   FOR %%g in (!%%f!) do set "%%f=%%~ng"
)

答案 1 :(得分:0)

试试这个:

FOR /f "delims=." %%f IN ("%_WRx32%") do set "_WRx32=%%f"
FOR /f "delims=." %%f IN ("%_WRx64%") do set "_WRx64=%%f"
FOR /f "delims=." %%f IN ("%_WRLNG%") do set "_WRLNG=%%f"

答案 2 :(得分:0)

我在命令行上尝试了类似的版本,看起来你不能在for循环中做多个变量变量(我知道)。

所以,你有两个选择:

  1. 如果您知道 总是 的变量有4个字符的扩展名(包括句点),那么您可以使用set _WRLNG=%_WRLNG:~0,-4%之类的内容。这将从变量中获取最后4个字符。

  2. 你必须为每个变量做一个循环,你需要修改你的方式。正确的方法是for /f %%i in ("%_WRLNG%") do set _WRLNG=%~ni

  3. 或者,请查看Endoro的答案,了解更好的for循环示例。

    编辑:想到另一种方式:

    @echo off
    for /f "delims=. tokens=1,2" %%i in ("%var%") do set var=%%i