Obtém o nome da pasta atual por um comando do DOS?

49

É possível obter o nome da pasta atual (não o caminho do diretório atual) usando um comando do DOS? Se sim, como?

O mais próximo que eu cheguei foi isso, mas não foi feito:

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

nota: a tentativa acima foi eu tentando tokenizar a string e pegar o último token definido como a variável CURR.

    
por djangofan 06.07.2010 / 23:29

9 respostas

67

O caminho mais curto que encontrei:

for %I in (.) do echo %~nxI

ou dentro de um script .bat:

for %%I in (.) do echo %%~nxI

ou em .bat com o valor Get na variável.

for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%

Explicação: link

nx significa apenas o nome do arquivo e a extensão

    
por 07.07.2010 / 00:27
28

Se você quiser saber a localização atual do arquivo de lote (e se o seu Windows não for uma versão muito antiga), digite for /? em uma janela 'Caixa do DOS'. Rolar para baixo. Leia.

Você descobrirá que agora pode ler (a partir de o arquivo de lote) estas variáveis:

%0      - as the name how this batchfile was called
%~d0    - as the drive letter where this batchfile is located ('\' in case of share)
%~p0    - as path (without the drive letter) where this batchfile is located
%~n0    - as filename (without suffix) of this batchfile
%~x0    - as filename's suffix (without filename) of this batchfile
%~a0    - as this batchfile's file attributes
%~t0    - as this batchfile's date+time
%~z0    - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]

Isso funciona para muitos casos. Suponha que o arquivo batch seja chamado de mytest.bat . Você pode chamá-lo de maneiras diferentes:

  1. ..\..\to\mytest.bat ............................... (caminho relativo)
  2. d:\path\to\mytest.bat ........................... (caminho completo)
  3. \fileserver\sharename\mytest.bat ... (caminho no compartilhamento remoto)

... e você sempre obterá o valor correto em suas variáveis.

    
por 07.08.2010 / 16:55
15

Eu pessoalmente gostei da resposta de Toms, até que ela lutou com pontos em nomes de dir. Isso me deu uma dica:

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
    
por 17.11.2011 / 10:20
5

A resposta de Tom é boa, mas se você tiver um nome de diretório com um período (ou seja, wxwidgets-2.9.4), você só receberá o nome completo. Portanto, isso resultaria em wxwidgets-2.9, em vez disso, porque o .4 foi tratado como uma extensão (Sim, mesmo que seja um nome de diretório!).

Para obter o nome completo da saída, você deve adicionar a extensão até o final:

FOR %I IN (.) DO Echo %~nI%~xI

e no modo de arquivo em lotes:

FOR %%I IN (.) DO Echo %%~nI%%~xI

Ou, é claro, defina uma variável no arquivo em lotes:

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
    
por 06.08.2013 / 15:11
4

Outra maneira é:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%  

funciona com "." e espaços no nome do caminho

O que isso faz?

  1. coloque o nome do arquivo inteiro (driveletter-path-filename-extension) em MyPath Var

  2. remova o nome de arquivo e a extensão de MyPath var

Também funciona com caminhos UNC. Se você precisar da barra invertida no final do caminho. Remova o \ após MyPath no segundo comando set, por exemplo.

set "MyPath=%%MyPath:%~nx0=%%"
    
por 15.03.2012 / 11:19
4

Você pode obter o diretório atual em uma variável. One-liner:

set a=%cd%

Verifique com

echo %a%
    
por 24.04.2012 / 17:54
1

Minha resposta em this thread faz isso em 3 linhas simples:

@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul
    
por 07.12.2011 / 19:59
1

apenas simples

for %%d in ("%CD%") do echo %%~nxd

ou

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

Cuidado com a barra invertida do final do caminho, não precisa ser uma barra invertida do final.

    
por 10.10.2016 / 04:11
1

Isso funciona para mim a partir de um arquivo em lotes. Ele retorna o nome do diretório de trabalho atual.

pushd %1 & for %%i in (.) do @echo %%~ni
    
por 28.05.2015 / 18:08