Comando shell do Windows para obter o caminho completo para o diretório atual?

223

Existe um comando de linha de comando do Windows que eu possa usar para obter o caminho completo para o diretório de trabalho atual?

Além disso, como posso armazenar esse caminho dentro de uma variável usada em um arquivo em lotes?

user62958
fonte
find / dir / para / start / from -type f -ls Esse formato forma a data para a localização numérica / dir / to / start / from -type f -exec ls -l --time-style = "+% Y% m% e% H:% M "{} \;
Dê uma olhada nesta resposta stackoverflow.com/a/52301748/2704032
Vishrant

Respostas:

356

Use cdsem argumentos se estiver usando o shell diretamente ou %cd%se desejar usá-lo em um arquivo em lotes (ele se comporta como uma variável de ambiente).

Trevor Bramble
fonte
11
Como você entendeu o que ele estava tentando dizer disso ? E, sob DOS e Windows cmd, sua geralmente apenas "cd"
Rook
10
Honestamente, eu não conseguia pensar em mais nada que eles estivessem tentando perguntar como a pergunta dizia.
Trevor Bramble
1
Posso armazenar esse caminho dentro de uma variável em um arquivo .bat?
User62958 03/03
@ desconhecido - você pode estar melhor descrevendo o problema original em primeiro lugar.
Rook
100

Você pode definir uma variável de lote / ambiente da seguinte maneira:

SET var=%cd%
ECHO %var%

amostra de captura de tela de um Windows 7 x64 cmd.exe.

insira a descrição da imagem aqui

Atualização: se você fizer um emSET var = %cd%vez deSET var=%cd%, abaixo está o que acontece. Graças a jeb.

insira a descrição da imagem aqui

Capturando o diretório atual de um arquivo em lotes

gmaran23
fonte
2
De acordo com a pergunta, essa resposta deve ser realmente a aceita.
René Nyffenegger
7
Mas não funciona, como SET var = %cd%colocar o valor na variável var<space>não inserida var. Você deve evitar espaços no comando SET
jeb
1
De acordo com a pergunta, essa resposta deve ser realmente a aceita.
shridutt kothari
51

Cite a ajuda do Windows para o setcomando ( set /?):

Se as extensões de comando estiverem ativadas, haverá várias opções dinâmicas.
variáveis ​​de ambiente que podem ser expandidas, mas que não aparecem no
a lista de variáveis ​​exibida por SET. Esses valores variáveis ​​são
calculado dinamicamente cada vez que o valor da variável é expandido.
Se o usuário definir explicitamente uma variável com um desses nomes, então
essa definição substituirá a dinâmica descrita abaixo:

% CD% - expande para a cadeia de diretórios atual.

% DATE% - expande para a data atual usando o mesmo formato do comando DATE.

% TIME% - expande para a hora atual usando o mesmo formato do comando TIME.

% RANDOM% - expande para um número decimal aleatório entre 0 e 32767.

% ERRORLEVEL% - expande para o valor atual de ERRORLEVEL

% CMDEXTVERSION% - expande para as extensões atuais de processador de comando
    número da versão.

% CMDCMDLINE% - expande para a linha de comando original que chamou o
    Processador de comando.

Observe a %CD% - expands to the current directory string.parte.

Patrick Cuff
fonte
26

No Unix?

pwd

Stephen Curial
fonte
2
O OP originalmente solicitou um "comando" e não especificou o SO. O SO foi agora especificado, portanto esta resposta não é mais relevante.
28616 Tisch
18

Para Windows, podemos usar

cd

e para Linux

pwd

comando está lá.

Nikunj K.
fonte
17

Isto sempre funcionou para mim:

SET CurrentDir="%~dp0"

ECHO The current file path this bat file is executing in is the following:

ECHO %CurrentDir%

Pause
Fred Scales
fonte
2
Isso faz a coisa errada - encontra o caminho do script em lote, não o diretório atual.
Harry Johnston
2
Votado por responder à pergunta do OP ... e me dar a solução exata que eu estava procurando. Obrigado!
A-Diddy
Boa pegada. O diretório atual pode se referir ao comando que chama o arquivo, em vez da localização do arquivo.
Tam Le
9

Para Windows, cdpor si só, mostrará o diretório de trabalho atual.

Para UNIX e sistemas semelhantes, pwdexecutará a mesma tarefa. Você também pode usar a $PWDvariável shell sob algumas conchas. Não tenho certeza se o Windows oferece suporte à obtenção do diretório de trabalho atual por meio de uma variável de shell ou não.

Michael Trausch
fonte
No entanto, não consigo entender por que ele precisa de "cd" para ver seu diretório atual. Por padrão, é visível como dia. E se ele mudou, então ele certamente sabe o que "cd" faz.
Rook
muito antigo, mas apenas para completar: sim, o Windows tem uma variável para isso. É nomeado (acho ...)%cd%
Stephan
8

No Windows:

CHDIR Exibe o nome ou altera o diretório atual.

No Linux:

PWD Exibe o nome do diretório atual.

Ajay Jayavarapu
fonte
5

Com base na pergunta de acompanhamento (armazene os dados em uma variável) nos comentários da postagem do chdir, aposto que ele deseja armazenar o caminho atual para restaurá-lo após alterar os diretórios.

O usuário original deve consultar "pushd", que altera o diretório e coloca o atual em uma pilha que pode ser restaurada com um "popd". Em qualquer shell cmd moderno do Windows, esse é o caminho a seguir ao criar arquivos em lote.

Se você realmente precisar pegar o caminho atual, os shells modernos do cmd também terão uma variável% CD% que poderá ser facilmente armazenada em outra variável para referência.

Marca
fonte
5

Criar um .batem arquivo System32, vamos nomeá-lo copypath.batdo comando para copiar caminho atual poderia ser :

echo %cd% | clip

Explicação:

%cd% fornecerá o caminho atual

CLIP

Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.

Parameter List:
    /?                  Displays this help message.

Examples:
    DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.

    CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

Agora copyclipestá disponível em qualquer lugar.

Vishrant
fonte
3
@echo off
for /f "usebackq tokens=*" %%x in (`chdir`) do set var=%%x
echo The currenct directory is: %var%

Mas, é claro , a resposta de gmaran23 é a mais fácil.

René Nyffenegger
fonte
Sua resposta é melhor por definição, porque sua resposta está errada. Não funciona para caminhos com espaços.
Garric
Adicionando tokens=*corrige isso.
René Nyffenegger
2

Em um prompt de comando do Windows, chdirou cdimprimirá o caminho completo do diretório de trabalho atual no console.

Se queremos copiar o caminho então podemos usar: cd | clip.

Samrat Debroy
fonte
0

No Windows, digite cdo caminho atual de trabalho.

No Linux, pwdpara o caminho de trabalho atual.

Shafeer khan
fonte
5
Já existem 10 respostas com a mesma solução, mas mais explicações
jeb
0

Como um dos códigos possíveis

    echo off
    for /f "usebackq tokens=* delims= " %%x in (`chdir`) do set var=%var% %%x
    echo The current directory is: "%var:~1%"
Garric
fonte