0

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

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 循环中,我不知道如何将名称从 (...variable names ...) 列表转换为相应的变量,因此我可以应用参数扩展,如“~n”、“~nf”等。 在上面。

谁能帮我 ?

谢谢

4

3 回答 3

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"
)
于 2013-04-12T01:33:14.993 回答
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"
于 2013-04-11T23:38:22.660 回答
0

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

所以,你有两个选择:

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

  2. 您必须为每个变量执行一个循环,并且您需要修正执行它们的方式。正确的方法是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
于 2013-04-11T23:39:18.050 回答