首先是我的批处理脚本代码段(不工作):
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”等。
任何人都可以帮助我吗?
由于
答案 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循环中做多个变量变量(我知道)。
所以,你有两个选择:
如果您知道 总是 的变量有4个字符的扩展名(包括句点),那么您可以使用set _WRLNG=%_WRLNG:~0,-4%
之类的内容。这将从变量中获取最后4个字符。
你必须为每个变量做一个循环,你需要修改你的方式。正确的方法是for /f %%i in ("%_WRLNG%") do set _WRLNG=%~ni
。
或者,请查看Endoro的答案,了解更好的for
循环示例。
编辑:想到另一种方式:
@echo off
for /f "delims=. tokens=1,2" %%i in ("%var%") do set var=%%i