我正在创建一个批处理脚本,其中我需要定义一个变量来从 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.删除.tar
set "_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 出现的内容。