Como faço para obter a última parte do diretório de uma linha de comando

3

Como faço para armazenar a última parte do diretório em uma variável?

Por exemplo, eu tenho o seguinte caminho: A\B\C\D , eu quero armazenar D na variável como file_name=D .

    
por Mohammad AL-Rawabdeh 13.03.2011 / 15:19

2 respostas

5

Por causa da sua tag do Windows, presumo que seu cmd.exe tenha extensões internas. Se esse for o caso, você pode usar duas das referências de variáveis especiais de substituição de FOR :

Dada uma variável %A , contendo um caminho e um arquivo:

%~nA exibirá o nome do arquivo, %~xA exibirá a extensão do arquivo. O exemplo a seguir usa o caractere de pipe | como um delimitador. O pipe é um caractere inválido para arquivos e caminhos e não deve aparecer em um caminho. Isso permitirá espaços em caminhos e nomes de arquivos. Veja FOR /? para detalhes completos.

C:\> SET FSPATH=C:\WINDOWS\Temp\file.txt
C:\> echo %FSPATH%

C:\WINDOWS\Temp\file.txt

C:\> FOR /F "delims=|" %A IN ("%FSPATH%") do echo %~nxA

file.txt

Como alternativa, se você não tiver extensões em seu cmd.exe , poderá usar delims=\ , contar os separadores de diretório e dividir sua sequência de caminho / arquivo com base nesse número.

Editar: por seu comentário sobre o erro. Acima está um exemplo na linha de comando . Se você deseja executar o mesmo dentro de um script em lote, é necessário dobrar o % nas variáveis:

FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA

Para usar o valor fora do loop FOR , você precisará atribuir o valor a outra variável. A variável %%A está limitada ao escopo de FOR .

:: example.bat
SET FSPATH=C:\Windows\bfsvc.exe
FOR /F "delims=|" %%A IN ("%FSPATH%") DO (
    echo Inside loop %%~nxA
    SET SOMEFILE=%%~nxA
)

ECHO Outside loop %SOMEFILE%
    
por 13.03.2011 / 15:55
1

Experimente:

for %f in (A\B\C\D) do set var=%~nxf
    
por 13.03.2011 / 15:55