【问题标题】:How can i remove the extension of a filename which is saved in a batch variable?如何删除保存在批处理变量中的文件名的扩展名?
【发布时间】:2013-04-11 23:19:10
【问题描述】:

首先我的批处理脚本 sn-p(不工作):

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”等。

谁能帮帮我?

谢谢

【问题讨论】:

    标签: variables for-loop batch-file filenames


    【解决方案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"
    )
    

    【讨论】:

      【解决方案2】:

      试试这个:

      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"
      

      【讨论】:

        【解决方案3】:

        我在命令行上尝试了一个类似的版本,看来你不能在 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
        

        【讨论】:

          猜你喜欢
          • 2011-03-14
          • 1970-01-01
          • 2013-01-04
          • 2011-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-05
          相关资源
          最近更新 更多