Como apenas obter o primeiro Word em uma variável de ambiente? - batch / cmd

1

Eu quero copiar um arquivo para um determinado local, um usuário do Jenkins será solicitado a digitar o nome do projeto e o arquivo de lote deve levar apenas a primeira palavra do nome do projeto para entrar em um caminho de diretório.

C:\Testfolder\%Project_Name%\Sub\

Agora, o nome do projeto é assim:

Proj_1 Something Somethingelse

No entanto, eu só quero que Proj_1 seja a pasta acessada, assim:

C:\Testfolder\Proj_1\Sub
Not: C:\Testfolder\Proj_1 Something Somethingelse\Sub\

Existe alguma maneira de fazer isso em lote?

    
por Jordan181 17.11.2016 / 11:46

2 respostas

1

Como apenas obter o primeiro Word em uma variável de ambiente?

Use o seguinte arquivo de lote (test.cmd) e ajuste conforme necessário.

@echo off
setlocal
set "Project_Name=Proj_1 Something Somethingelse"
for %%i in (%Project_Name%) do (
  set First_word=%%i
  goto done
  )
:done
echo C:\Testfolder\%First_Word%\Sub\
endlocal

Exemplo de saída:

> test
C:\Testfolder\Proj_1\Sub\

Leitura Adicional

por 17.11.2016 / 13:43
0

Aqui estão duas opções adicionais para você que exigem menos código.

O primeiro usa os delimitadores naturais do comando FOR /F . Desta forma, você não precisa usar um comando goto para sair do loop.

@echo off
set "Project_Name=Proj_1 Something Somethingelse"
for /F %%G IN ("%Project_Name%") do set "First_word=%%G"
echo C:\Testfolder\%First_Word%\Sub\

A segunda técnica usa um truque com o comando SET para dividir a linha com base em um delimitador, substituindo o delimitador por outro comando set. Na minha versão eu uso uma SET com a opção /P para que quaisquer outras palavras dentro da string não sejam atribuídas a uma variável.

@echo off
set "Project_Name=Proj_1 Something Somethingelse"
(set "First_Word=%Project_Name: =" & set /p "=%" )<nul >nul
echo C:\Testfolder\%First_Word%\Sub\
    
por 15.12.2017 / 22:09