Какая альтернатива ~ (домашний каталог пользователя) в командной строке Windows?

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


person fenerlitk    schedule 10.02.2012    source источник


Ответы (11)


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

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

person Jay    schedule 10.02.2012
comment
Я был разочарован. - person styks; 01.07.2021

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

person Alex K.    schedule 10.02.2012
comment
Этот ответ работал для службы, работающей как локальная системная учетная запись. % userprofile% в этом случае нет. - person DonBecker; 19.03.2015

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

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

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

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

    \Users\<CurrentUserName>
    

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

C:\Users\<CurrentUserName>
person RBT    schedule 23.03.2017
comment
вам также понадобится% homedrive%; см. ответ Alex K выше - person Edward Falk; 23.07.2017
comment
@EdwardFalk Я исправил свой ответ. Я не упомянул переменную окружения %systemdrive%, которая эквивалентна %homedrive%, упомянутой Алексом. Пожалуйста, дайте мне свой отзыв, если вы обнаружите что-то неправильное. - person RBT; 23.07.2017
comment
В Windows вы можете переместить всю свою пользовательскую папку на другой диск (например, D: \ MyUser). В этих сценариях% systemdrive %% homepath% завершится ошибкой. Вместо этого следует использовать% HOMEDRIVE %% HOMEPATH%. - person Daniel Santos; 23.08.2017
comment
Правда. Это возможно, но не совсем обычное явление для людей изменять эти стандартные переменные среды. В обычной корпоративной среде эти переменные среды регулируются ИТ-отделом с помощью групповых политик AD, как указано в здесь и здесь. - person RBT; 24.08.2017
comment
Так что в общем случае они дают один и тот же ответ. В редких случаях правильный ответ - только %HOMEDRIVE%%HOMEPATH%. Поэтому %HOMEDRIVE%%HOMEPATH% - правильный ответ во всех случаях, и я рекомендую изменить свой ответ соответствующим образом. - person Ken Williams; 02.12.2020

Обновление - лучшая версия 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=%*
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%"

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

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..)
person Christopher Plewright    schedule 07.10.2018
comment
В этом ответе есть способ запустить CMD с файлом типа .bashrc: superuser.com/questions/144347/. Помещение шага 1. из этого ответа в файл bashrc.bat установит его при запуске. - person Brydenr; 18.12.2019
comment
Просто для уточнения; хотя bash также следует аналогичному шаблону, поэтому он похож на bash, для этого не требуется использовать bash. Я просто использую очень старый трюк DOS с реестром Windows. Я использую расположение реестра Windows HKCU \ Software \ Microsoft \ Command Processor, нахожу строковый ключ / значение Autorun и ввожу имя файла cmd по вашему выбору. например, у меня есть это: C: \ Users \ username \ .autorun.cmd, вы можете поместить этот файл в любое место, которое имеет смысл для вашей конфигурации. Windows будет запускать этот файл каждый раз, когда вы открываете командную строку dos. - person Christopher Plewright; 30.01.2021
comment
@Brydenr, вы предоставили хорошую ссылку, да, именно так я ее добился, без bash, но как bash - person Christopher Plewright; 30.01.2021

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

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

person Mark Richer    schedule 24.10.2016
comment
Как точно установить значение ~ = %userprofile%? Я выполнил точную команду, упомянутую в вашем сообщении, в командной строке, но выдает ошибку - '~' is not recognized as an internal or external command, operable program or batch file.. Не могли бы вы подробнее рассказать о своем ответе? - person RBT; 23.07.2017
comment
Если вы используете set ~=%userprofile%, вы можете использовать %~% для переменной - person forresthopkinsa; 19.09.2017
comment
@RBT, если вы используете PowerShell, попробуйте ${env:~}="$env:homedrive$env:homepath". - person Ken Williams; 02.12.2020

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

    set usr=%userprofile%
    cd %usr%

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

person Scotty J    schedule 10.01.2016

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

После этого откройте cmd и введите следующее:
cd% ~%
. Оно работает.

person hkaraoglu    schedule 09.05.2017

Просто

Первое определение пути

doskey ~=cd %homepath%

Тогда доступ

~
person Matee Gojra    schedule 22.10.2019

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

https://github.com/yxliang01/Snippets/blob/master/windows/ < / а>

person Fries    schedule 24.03.2017

Используйте 1_. %systemdrive% указывает символ диска (в основном C:), а %homepath% указывает домашний каталог пользователя (\Users\<USERNAME>).

person maDeveloper    schedule 01.01.2021

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

person samvatsar    schedule 21.09.2018
comment
home! = c: \ Вместо этого Original Poster спрашивает о папке C:\Users\username (или c:\Documents and Settings\username в более ранних версиях Windows) - person v.karbovnichy; 17.01.2019
comment
Даже если вы хотите перейти в корень C:\ , рекомендуется использовать cd \ вместо неопределенного числа cd ..\..\.. - person lcnittl; 29.05.2020