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


216

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

Ответы:


326

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

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


39

Можно %HOMEDRIVE%%HOMEPATH%на драйве + \docs settings\usernameили \users\username.


3
Этот ответ работал для службы, работающей под учетной записью локальной системы. % userprofile% в этом случае нет.
DonBecker,

15

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

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

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

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

    \Users\<CurrentUserName>
    

Когда используется вместе это становится:

C:\Users\<CurrentUserName>

вам также понадобится% homedrive%; см. ответ Алекса К выше
Эдвард Фальк

2
@ EdwardFalk Я исправил свой ответ. Я упустил упомянуть %systemdrive%переменную среды, которая эквивалентна %homedrive%упомянутой Алексом. Пожалуйста, дайте мне свой отзыв об этом, если вы обнаружите что-то неправильное.
RBT

8
В Windows вы можете переместить всю пользовательскую папку на другой диск (например, D: \ MyUser). В этих случаях% systemdrive %% homepath% завершится ошибкой. Вместо этого следует использовать% HOMEDRIVE %% HOMEPATH%.
Даниэль Сантос

Правда. Это возможно, но люди обычно не меняют эти стандартные переменные среды. В обычной корпоративной среде эти переменные среды управляются ИТ-отделом посредством групповых политик AD, как указано здесь и здесь .
RBT

6

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

и затем файл с битой на моем пути;

cdtilde.bat

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

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

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

Этот ответ позволяет запустить CMD с .bashrcфайлом -типа: superuser.com/questions/144347/… . Помещение шага 1. из этого ответа в bashrc.batфайл установит его при запуске.
Бриден

2

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

    set usr=%userprofile%
    cd %usr%

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


2

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

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


2

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

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


2
Как вы точно установите значение ~= %userprofile%? Я выполнил точную команду, упомянутую в вашем посте, в командной строке, но она выдает ошибку - '~' is not recognized as an internal or external command, operable program or batch file.. Можете ли вы более подробно изложить свой ответ?
RBT

3
Если вы используете, set ~=%userprofile%то вы можете использовать %~%для переменной
forresthopkinsa

0

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

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



-5

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


2
home! = c: \ Вместо этого Original Poster спрашивает о C:\Users\usernameпапке (или c:\Documents and Settings\usernameв более ранней Windows)
v.karbovnichy

Даже если вы хотите зайти в корень C:\ , рекомендуется cd \ вместо неопределенного числа использоватьcd ..\..\..
lcnittl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.