Какая альтернатива для ~ (домашний каталог пользователя) в командной строке Windows? - PullRequest
165 голосов
/ 10 февраля 2012

Я пытаюсь использовать командную строку для перемещения некоторых файлов, я привык к терминалу Linux, где я использую ~, чтобы указать мой домашний каталог, который я искал везде, но я не мог его найтидля командной строки Windows (Documents and Settings\[user])

Ответы [ 9 ]

255 голосов
/ 10 февраля 2012

Вы будете разочарованы: %userprofile%

Вы можете использовать и другие терминалы. Powershell, который, я полагаю, можно получить на XP и более поздних версиях (и поставляется с предустановленной Win7), позволяет использовать ~ для домашнего каталога.

34 голосов
/ 10 февраля 2012

Вы можете %HOMEDRIVE%%HOMEPATH% для привода + \docs settings\username или \users\username.

11 голосов
/ 23 марта 2017

Для этого можно использовать переменную среды %systemdrive%%homepath%.

При объединении двух переменных команды вы получите путь к домашнему каталогу нужного пользователя, как показано ниже:

  1. Запуск echo %systemdrive% в командной строке дает:

    C:
    
  2. Запуск echo %homepath% в командной строке дает:

    \Users\<CurrentUserName>
    

При использованиивместе это становится:

C:\Users\<CurrentUserName>
3 голосов
/ 09 мая 2017

Вы можете сделать почти то же самое самостоятельно. Откройте переменные среды и нажмите кнопку «Создать» в разделе «Пользовательские переменные для ...».
Имя переменной: ~
Значение переменной: Нажмите кнопку «Обзор каталога ...» и выберите нужный каталог.

И после этого откройте cmd и введите:
кд% ~%
. Это работает.

2 голосов
/ 07 октября 2018

Обновление - наконец-то все заработало. 18 июля 2019 года.

Итоговое резюме, несмотря на то, что я все равно перешел на powershell для работы с большинством консолей Windows, но я решил закрыть эту старую проблему с cmd, мне пришлось сегодня перейти на консоль cmd, и отсутствие этой функции действительно ударил меня. Этот, наконец, работает и с пробелами, где мой предыдущий ответ потерпит неудачу.

Кроме того, теперь он также может использовать ~ в качестве префикса для других домашних подпапок, а также меняет прямую и обратную косые черты. Итак, вот оно;

Шаг 1. Создайте эти doskey макросы, где бы они ни появлялись при каждом запуске cmd.

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

Шаг 2. Создайте файл cdtilde.bat и поместите его где-нибудь в свой PATH

@echo off

set dirname=""
set dirname=%*

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

:: strip trailing slash.
if %dirname:~-1%==\ set dirname=%dirname:~0,-1%
if %dirname:~-1%==/ set dirname=%dirname:~0,-1%

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

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

chdir /D "%dirname%"

Проверено нормально с;

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

О, это также позволяет ленивые кавычки, которые я нашел полезными, даже когда в именах папок есть пробелы, так как он оборачивает все аргументы, как если бы это была одна длинная строка. Это означает, что только начальная цитата также работает, или полностью без кавычек также работает.

Все остальные вещи, приведенные ниже, теперь можно игнорировать, они оставлены по историческим причинам, поэтому я не повторяю те же ошибки снова


старое обновление 19 октября 2018.
В случае, если кто-то попробовал мой подход, мой первоначальный ответ ниже не обрабатывал пробелы, например, следующее не удалось.

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

Я думаю, что должен быть способ решить это. Опубликую еще раз, если я смогу улучшить свой ответ. (см. выше, я наконец все заработал так, как хотел.)


Мой оригинальный ответ, все еще нужна работа ... 7 октября 2018.
Я просто пытался сделать это сегодня, и я думаю, что понял, это то, что я думаю, работает хорошо;

Сначала несколько макросов doskey ;

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

и затем файл bat в моем пути;

cdtilde.bat

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

Все это, кажется, работает нормально;

cd ~ (traditional habit)
cd~  (shorthand version)
cd.. (shorthand for going up..)
2 голосов
/ 24 октября 2016

Я только что попробовал set ~=%userprofile%, и это тоже работает, если вы хотите продолжать использовать ту же привычку

Вместо этого вы можете использовать %~%.

2 голосов
/ 11 января 2016

Если вам нужна более короткая версия Jay's, вы можете попробовать

    set usr=%userprofile%
    cd %usr%

Или вы можете даже использовать % u% , если хотите. В любом случае это экономит некоторые нажатия клавиш.

0 голосов
/ 21 сентября 2018

Вы также можете выполнять cd ...... \ столько раз, сколько папок переносит вас в домашний каталог. Например, если вы находитесь в cd: \ windows \ syatem32, то cd .... \ приведет вас к дому, то есть c: \

0 голосов
/ 24 марта 2017

Только что написал сценарий, чтобы сделать это, не слишком много печатая, поддерживая переносимость, поскольку для установки ~ на %userprofile% требуется ручная настройка на каждом ПК с Windows, в то время как клонирование и настройка каталога как части PATH являются механическими .

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

...