Qual é a alternativa para ~ (diretório inicial do usuário) no prompt de comando do Windows?

215

Estou tentando usar o prompt de comando para mover alguns arquivos, estou acostumado ao terminal linux onde uso ~para especificar o meu diretório pessoal que procurei em todos os lugares, mas não consegui encontrá-lo no prompt de comando do Windows ( Documents and Settings\[user])

fenerlitk
fonte

Respostas:

324

Você ficará desapontado: %userprofile%

Você pode usar outros terminais, no entanto. O Powershell, que acredito que você pode obter no XP e posterior (e vem pré-instalado com o Win7), permite que você use o ~diretório inicial.

Jay
fonte
39

Você pode %HOMEDRIVE%%HOMEPATH%para a unidade + \docs settings\usernameou \users\username.

Alex K.
fonte
3
Esta resposta funcionou para um serviço em execução como conta do sistema local. % userprofile%, neste caso, não.
DonBecker
15

Você pode usar %systemdrive%%homepath%a variável de ambiente para fazer isso.

As duas variáveis ​​de comando, quando concatenadas, fornecem o caminho do diretório inicial do usuário desejado, conforme abaixo:

  1. A execução echo %systemdrive%no prompt de comando fornece:

    C:
    
  2. A execução echo %homepath%no prompt de comando fornece:

    \Users\<CurrentUserName>
    

Quando usados ​​juntos, eles se tornam:

C:\Users\<CurrentUserName>
RBT
fonte
você também precisará de% homedrive%; veja a resposta de Alex K, acima
Edward Falk
2
@EdwardFalk Corrigi minha resposta. Eu tinha esquecido de mencionar %systemdrive%a variável de ambiente que é equivalente à %homedrive%mencionada por Alex. Envie-me seus comentários sobre isso se encontrar algo incorreto.
RBT 23/07
8
No Windows, você pode mover toda a pasta do usuário para outra unidade (por exemplo: D: \ MyUser). Nesses cenários,% systemdrive %% homepath% falhará. % HOMEDRIVE %% HOMEPATH% deve ser usado.
Daniel Santos
Verdade. É possível, mas não é tão comum que as pessoas alterem essas variáveis ​​de ambiente padrão. Em um ambiente corporativo usual, essas variáveis ​​de ambiente são governadas pelo departamento de TI por meio de políticas de grupo do AD, conforme mencionado aqui e aqui .
RBT
6

Atualização - versão melhorada 18 de julho de 2019.

Resumo final, mesmo que eu tenha mudado para o PowerShell para a maioria dos trabalhos de console do Windows, mas decidi encerrar esse antigo problema de cmd, tive que entrar em um console de cmd hoje e a falta desse recurso realmente me impressionou. Finalmente, este também funciona com espaços, onde minha resposta anterior falharia.

Além disso, este agora também é capaz de usar ~ como prefixo para outras subpastas domésticas também, e troca barras invertidas para barras invertidas também. Então aqui está;

Etapa 1. Crie essas macros doskey , em algum lugar em que são selecionadas sempre que o cmd é iniciado.

DOSKEY cd=cdtilde.bat $* 
DOSKEY cd~=chdir /D "%USERPROFILE%"
DOSKEY cd..=chdir ..

Etapa 2. Crie o arquivo cdtilde.bat e coloque-o em algum lugar do seu PATH

@echo off

set dirname=""
set dirname=%*
set orig_dirname=%*

:: remove quotes - will re-attach later.
set dirname=%dirname:\"=%
set dirname=%dirname:/"=%
set dirname=%dirname:"=%

:: restore dirnames that contained only "/"
if "%dirname%"=="" set dirname=%orig_dirname:"=%

:: strip trailing slash, if longer than 3
if defined dirname if NOT "%dirname:~3%"==""  (
    if "%dirname:~-1%"=="\" set dirname="%dirname:~0,-1%"
    if "%dirname:~-1%"=="/" set dirname="%dirname:~0,-1%"
)

set dirname=%dirname:"=%

:: if starts with ~, then replace ~ with userprofile path
if %dirname:~0,1%==~ (
    set dirname="%USERPROFILE%%dirname:~1%"
)
set dirname=%dirname:"=%

:: replace forward-slashes with back-slashes
set dirname="%dirname:/=\%"
set dirname=%dirname:"=%

chdir /D "%dirname%"

Testado bem com;

cd ~ (traditional habit)
cd~  (shorthand version)
cd.. (shorthand for going up..)
cd / (eg, root of C:)
cd ~/.config (eg, the .config folder under my home folder)
cd /Program Files (eg, "C:\Program Files")
cd C:/Program Files (eg, "C:\Program Files")
cd \Program Files (eg, "C:\Program Files")
cd C:\Program Files (eg, "C:\Program Files")
cd "C:\Program Files (eg, "C:\Program Files")
cd "C:\Program Files" (eg, "C:\Program Files")

Ah, também permite citações preguiçosas, o que achei útil, mesmo quando espaços estão nos nomes dos caminhos da pasta, uma vez que agrupa todos os argumentos como se fosse uma sequência longa. O que significa que apenas uma cotação inicial também funciona, ou completamente sem aspas também funciona.

Todas as outras coisas abaixo podem ser ignoradas agora, são deixadas por razões históricas - por isso não cometo os mesmos erros novamente


atualização antiga 19 de outubro de 2018.
Caso outra pessoa tenha tentado minha abordagem, minha resposta original abaixo não tratou de espaços, por exemplo, a seguinte falhou.

> cd "c:\Program Files"
Files""]==["~"] was unexpected at this time.

Eu acho que deve haver uma maneira de resolver isso. Postarei novamente se eu puder melhorar minha resposta. (veja acima, finalmente consegui fazer tudo funcionar do jeito que eu queria.)


Minha resposta original, ainda precisava de trabalho ... 7 de outubro de 2018.
Eu estava apenas tentando fazê-lo hoje e acho que entendi, é isso que acho que funciona bem;

Primeiro, algumas macros doskey ;

DOSKEY cd=cdtilde.bat $* 
DOSKEY cd~=chdir /D "%USERPROFILE%"
DOSKEY cd..=chdir ..

e então um arquivo bat no meu caminho;

cdtilde.bat

@echo off
if ["%1"]==["~"] ( 
    chdir /D "%USERPROFILE%"
) else ( 
    chdir /D %* 
)

Tudo isso parece funcionar bem;

cd ~ (traditional habit)
cd~  (shorthand version)
cd.. (shorthand for going up..)
Christopher Plewright
fonte
Esta resposta tem uma maneira de iniciar o CMD com um .bashrcarquivo -type: superuser.com/questions/144347/… . Colocar a etapa 1. desta resposta no bashrc.batarquivo o definirá na inicialização.
Brydenr
2

Se você quer uma versão mais curta do Jay, você pode tentar

    set usr=%userprofile%
    cd %usr%

Ou você pode até usar % u% se quiser. Ele salva algumas teclas pressionadas de qualquer maneira.

Scotty J
fonte
2

Você pode fazer quase o mesmo você mesmo. Abra Variáveis ​​de ambiente e clique no botão "Novo" em "Variáveis ​​de usuário para ...".
Nome da variável: ~
Valor da variável: Clique no botão "Procurar diretório ..." e escolha o diretório que deseja.

E depois disso, abra o cmd e digite:
cd% ~%
. Funciona.

hkaraoglu
fonte
2

Eu apenas tentei set ~=%userprofile%e isso funciona também se você quiser continuar usando o mesmo hábito

Você pode então usar %~%.

Mark Richer
fonte
2
Como você define exatamente o valor de ~= %userprofile%? Eu executei o comando exato mencionado em sua postagem no prompt de comando, mas ele lança um erro - '~' is not recognized as an internal or external command, operable program or batch file.. Você pode elaborar sua resposta um pouco mais?
RBT 23/07
3
Se você usar set ~=%userprofile%, poderá usar %~%a variável
forresthopkinsa
0

Acabei de escrever um script para fazer isso sem muita digitação, mantendo a portabilidade como a configuração ~necessária, e %userprofile%precisa de uma configuração manual em cada PC com Windows, enquanto a clonagem e a configuração do diretório são parte PATHmecânica.

https://github.com/yxliang01/Snippets/blob/master/windows/

Fritas
fonte
0

Simplesmente

Primeiro Definir Caminho

doskey ~=cd %homepath%

Então acesse

~
Matee Gojra
fonte
-5

Você também pode fazer o cd ...... \ quantas vezes houver pastas que o levem ao diretório inicial. Por exemplo, se você estiver no cd: \ windows \ syatem32, o cd .... \ leva você para a casa, ou seja, c: \

samvatsar
fonte
2
home! = c: \ Em vez disso, o Pôster original pergunta sobre a C:\Users\usernamepasta (ou c:\Documents and Settings\usernameno Windows anterior)
v.karbovnichy
Mesmo se você quiser ir para a raiz C:\ , é aconselhável usar em cd \ vez de um número indefinido decd ..\..\..
lcnittl