Jaka jest alternatywa dla ~ (katalog domowy użytkownika) w wierszu polecenia systemu Windows?


215

Próbuję użyć wiersza polecenia, aby przenieść niektóre pliki, jestem przyzwyczajony do terminala linux, gdzie używam ~do określenia mojego katalogu domowego, którego szukałem wszędzie, ale nie mogłem go znaleźć dla wiersza polecenia systemu Windows ( Documents and Settings\[user])

Odpowiedzi:


324

Będziesz rozczarowany: %userprofile%

Możesz jednak użyć innych terminali. Program PowerShell, który, jak sądzę, można uzyskać na XP i nowszych wersjach (i jest fabrycznie zainstalowany z Win7), umożliwia korzystanie ~z katalogu domowego.



15

Aby to zrobić, możesz użyć %systemdrive%%homepath%zmiennej środowiskowej.

Dwie zmienne poleceń po konkatenacji dają ścieżkę do katalogu domowego pożądanego użytkownika, jak poniżej:

  1. Uruchomienie echo %systemdrive%w wierszu polecenia daje:

    C:
    
  2. Uruchomienie echo %homepath%w wierszu polecenia daje:

    \Users\<CurrentUserName>
    

Po zastosowaniu razem staje się:

C:\Users\<CurrentUserName>

będziesz także potrzebować% homedrive%; patrz odpowiedź Alexa K powyżej
Edward Falk

2
@EdwardFalk Naprawiłem swoją odpowiedź. Nie wspomniałem o %systemdrive%zmiennej środowiskowej, która jest odpowiednikiem %homedrive%wspomnianej przez Alexa. Proszę dać mi swoją opinię na ten temat, jeśli znajdziesz coś niepoprawnego.
RBT

8
W systemie Windows możesz przenieść cały folder użytkownika na inny dysk (np .: D: \ MyUser). W tych scenariuszach% systemdrive %% homepath% zakończy się niepowodzeniem. Zamiast tego należy użyć% HOMEDRIVE %% HOMEPATH%.
Daniel Santos

Prawdziwe. Jest to możliwe, ale ludzie nie zmieniają tych standardowych zmiennych środowiskowych. W zwykłym środowisku korporacyjnym tymi zmiennymi środowiskowymi zarządza dział IT za pomocą zasad grupy AD, jak wspomniano tutaj i tutaj .
RBT

6

Aktualizacja - lepsza wersja 18 lipca 2019 r.

Ostateczne podsumowanie, mimo że mimo wszystko przeszedłem do PowerShell dla większości konsol Windows, ale postanowiłem zakończyć ten stary problem cmd, musiałem dziś dostać się na konsolę cmd i brak tej funkcji naprawdę mnie uderzył. Ten wreszcie działa również ze spacjami, w których moja poprzednia odpowiedź zawiodłaby.

Ponadto ten teraz może także używać ~ jako prefiksu dla innych domowych podfolderów, a także zamienia ukośniki na ukośniki. Więc oto jest;

Krok 1. Utwórz te makra doskey , gdzieś będą pobierane przy każdym uruchomieniu cmd.

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

Krok 2. Utwórz plik cdtilde.bat i umieść go gdzieś w ŚCIEŻCE

@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%"

Testowane dobrze z;

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")

Och, pozwala także na leniwe cytowanie, co uważam za przydatne, nawet gdy w nazwach ścieżek folderów znajdują się spacje, ponieważ zawija wszystkie argumenty tak, jakby to był jeden długi ciąg. Co oznacza, że ​​działa tylko wstępna wycena lub działa całkowicie bez cytatów.

Wszystkie inne rzeczy poniżej można teraz zignorować, pozostawiają to z powodów historycznych - więc nie popełniam ponownie tych samych błędów


stara aktualizacja 19 października 2018 r.
W przypadku gdyby ktoś inny wypróbował moje podejście, moja pierwotna odpowiedź poniżej nie obsługiwała spacji, np. następujące nie powiodło się.

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

Myślę, że musi być sposób na rozwiązanie tego. Opublikuje ponownie, jeśli mogę poprawić swoją odpowiedź. (patrz wyżej, w końcu wszystko działało tak, jak chciałem).


Moja oryginalna odpowiedź, wciąż potrzebowałem pracy ... 7 października 2018.
Właśnie próbowałem to zrobić dzisiaj i myślę, że dostałem, tak myślę, że to działa dobrze;

Po pierwsze, niektóre makra doskey ;

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

a potem plik nietoperza na mojej ścieżce;

cdtilde.bat

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

Wszystko to wydaje się działać dobrze;

cd ~ (traditional habit)
cd~  (shorthand version)
cd.. (shorthand for going up..)

Ta odpowiedź ma sposób na uruchomienie CMD z .bashrcplikiem typu: superuser.com/questions/144347/… . Umieszczenie kroku 1. z tej odpowiedzi w bashrc.batpliku spowoduje ustawienie go podczas uruchamiania.
Brydenr

2

Jeśli chcesz krótszą wersję Jaya, możesz spróbować

    set usr=%userprofile%
    cd %usr%

Lub możesz nawet użyć % u%, jeśli chcesz. I tak oszczędza trochę naciśnięć klawiszy.


2

Możesz zrobić prawie to samo. Otwórz Zmienne środowiskowe i kliknij przycisk „Nowy” w „Zmiennych użytkownika dla ...”.
Nazwa zmiennej: ~
Wartość zmiennej: Kliknij przycisk „Przeglądaj katalog ...” i wybierz żądany katalog.

A potem otwórz cmd i wpisz:
cd% ~%
. To działa.


2

Właśnie próbowałem set ~=%userprofile%i to też działa, jeśli chcesz nadal używać tego samego nawyku

Zamiast tego możesz użyć %~%.


2
Jak dokładnie ustawić wartość ~= %userprofile%? Uruchomiłem dokładnie polecenie wymienione w poście w wierszu polecenia, ale generuje błąd - '~' is not recognized as an internal or external command, operable program or batch file.. Czy możesz bardziej szczegółowo udzielić odpowiedzi?
RBT

3
Jeśli używasz set ~=%userprofile%, możesz użyć %~%zmiennej
forresthopkinsa,


0

Po prostu

Najpierw określ ścieżkę

doskey ~=cd %homepath%

Następnie Access

~

-5

Możesz także zrobić cd ...... \ tyle razy, ile jest folderów, które zabiorą cię do katalogu domowego. Na przykład, jeśli jesteś w cd: \ windows \ syatem32, to cd .... \ zabierze cię do domu, to znaczy c: \


2
home! = c: \ Zamiast tego oryginalny plakat pyta o C:\Users\usernamefolder (lub c:\Documents and Settings\usernamewe wcześniejszym systemie Windows)
v.karbovnichy

Nawet jeśli chcesz przejść do katalogu głównego C:\ , zaleca się użycie cd \ zamiast nieokreślonej liczbycd ..\..\..
lcnittl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.