Designando o nome do diretório para uma variável no lote cmd

5

Eu quero recuperar um nome de arquivo e atribuí-lo a uma variável para que eu possa usá-lo ainda mais no script.

set directoryName = dir Docum?nt*
echo %directoryName%

Mas uma vez que eu executo o arquivo de lote, tudo o que consigo é isso.

D:\ >a.bat
D:\ >set directoryName = dir Docum?nt*
D:\ >echo
ECHO is on.

Como posso ter certeza de que minha variável recebeu o valor, ou seja, o nome do diretório para que eu possa começar a escrever mais scripts.

my a.bat contém:

set directoryName=dir Docum?nt*
echo %directoryName%

Depois de remover espaços:

D:\Workspace>set directoryName=dir Docum?nt*

D:\Workspace>echo dir Docum?nt*
dir Docum?nt*

Eu acho que o valor vairbale foi atribuído a todo o valor juntamente com a palavra-chave de comando em vez dos resultados. Espero que a saída seja o nome do diretório, ou seja, Documentation

    
por Maven 09.03.2017 / 15:20

4 respostas

3

Você tem espaço em branco antes e depois do sinal de igual da configuração da variável, apenas remova-o e use o método abaixo, por exemplo.

@ECHO ON

set directoryName=dir Docum?nt*
echo %directoryName%

Errado

  • set directoryName = dir Docum?nt*

Correto

  • %código%

FORloopimplícito

FOR/F"TOKENS=*" %%F IN ('DIR /B /AD "Docum?nt*"') DO SET directoryName=%%~F

Loop forçado recursivo

FOR /F "TOKENS=*" %%F IN ('DIR /B /AD /S "Docum?nt*"') DO SET directoryName=%%~F

Mais recursos

por 09.03.2017 / 15:29
4

Se o que você deseja é definir o nome do diretório que corresponde a Docum?nt* , então o que você precisa é:

for /d %%d in (Docum?nt*) do set directoryName="%%d"

Se mais de um diretório corresponder à máscara, você receberá apenas uma das correspondências. Se você precisar que a variável mantenha uma lista dos diretórios correspondentes, será necessário usar for /f .

    
por 09.03.2017 / 15:41
3

Sem espaços.

Se você precisar usar espaço em nomes, coloque-os sob este formato:

set directoryName = "dir Docum?nt*"

É "" ou sem espaços .

    
por 09.03.2017 / 15:26
2

Espero que a saída seja o nome do diretório, por exemplo, Documentation

Você não receberá Documentation como saída, a menos que execute o comando armazenado na variável.

Use o seguinte arquivo de lote (test.cmd):

@echo off
setlocal
set directoryName=dir Docum?nt*
rem run command
cmd /c %directoryName%
pause 
endlocal

Exemplo de saída:

> test
dir Docum?nt*
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

09/03/2017  17:10    <DIR>          Documentation
               0 File(s)              0 bytes
               1 Dir(s)  1,701,065,842,688 bytes free

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todos
  • cmd - Inicie um novo shell CMD e (opcionalmente) execute um programa de comando / executável.
  • dir - Exibe uma lista de arquivos e subpastas.
  • definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
por 09.03.2017 / 18:13

Tags