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%