如何在批处理脚本中仅获取不带 .tar.gz 的文件名

如何在批处理脚本中仅获取不带 .tar.gz 的文件名

我正在创建一个批处理脚本,其中我需要定义一个变量来从 Windows 命令提示符启动 docker shell。

该脚本让用户从他们的目录中选择他们的 docker 镜像构建,但文件.tar.gz格式是。

在我的脚本中从 切换%~nxI%~ni只会删除.gz

我是否需要解压缩文件才能执行此操作,或者是否有其他命令将名称(不包含.tar部分)复制到变量中?

Pause
cd /images
setlocal enabledelayedexpansion

set /A counter=0
set choice=

for /R %%i in (iac_*.tar.gz) do (
    if not "%%~ni" == "%~nx0" (
         set /A counter+=1
         echo !counter!: %%~ni
         set deployment_builder[!counter!]=%%i
         set choice=!choice!!counter!
        )
    )

if %counter% LSS 10 (
      choice /C %choice% /M "type deployment_builder number"
      set DEPBUILDNUM=!ERRORLEVEL!
    ) else set /P DEPBUILDNUM="enter deployment_builder number: "

set DEPLOYMENTBUILDER=!deployment_builder[%DEPBUILDNUM%]!
echo %DEPLOYMENTBUILDER%

答案1

尝试删除最后 4 个字符 ( .tar)

1.定义set _Variable=%%~ni
2.删除.tarset "_Variable=!_Variable:~0,-4!"


@echo off 

Pause
cd .\images
setlocal enabledelayedexpansion
set "counter=0" && set "choice="

for /R %%i in (iac_*.tar.gz) do (
     set "name=%%~ni"
     set "name=!name:~0,-4!"
     if not "!name!%%~xi" == "%~nx0" (
         set /a "counter+=1"
         echo !counter!: !name!
         set deployment_builder[!counter!]=%%i
         set "choice=!choice!!counter!"
        )
    )
    
if !counter! LSS 10 (
     choice /C !choice! /M "type deployment_builder number"
     set "DEPBUILDNUM=!ERRORLEVEL!"
    )else set /P DEPBUILDNUM="enter deployment_builder number: "

set DEPLOYMENTBUILDER=!deployment_builder["DEPBUILDNUM"]!
echo !DEPLOYMENTBUILDER!

其他资源:

答案2

你可以使用这个:

for /f "delims=." %%i in ('dir /s /b /a-d iac_*.tar.gz') do set "NameOnly=%%i"

这将在 %NameOnly% 中的任何点之前保存名称的左侧,除非名称中有更多点,如 This.is.the.file.name.tar.gz 在这种情况下,它只会保存“This”...

或者你可以使用:

for /R %%i in (iac_*.tar.gz) do (
                                 set "NameOnly=%%i"
                                 set "NameOnly=!NameOnly:.tar.gz=!"
                                )

这会将正常名称保存在 NameOnly 中,然后从名称中删除所有 tar.gz 出现的内容。

相关内容