Windows命令提示符下〜(用户主目录)的替代方法是什么?

fen*_*itk 189 command command-prompt home-directory

我正在尝试使用命令提示符移动一些文件,我习惯使用linux终端我~用来指定我的主目录我到处都看了但是我似乎无法找到它的Windows命令提示符(Documents and Settings\[user])

Jay*_*Jay 289

你会失望的: %userprofile%

但是,您可以使用其他终端.Powershell,我相信你可以使用XP及更高版本(并预装Win7),允许你~用于主目录.

  • @mcalex:在 PS 中,您通常引用这样的环境变量:`$env:userprofile`。`cd $env:userprofile` 工作得很好。除此之外,“C:\%userprofile%”始终是无效路径,因为环境变量已经包含驱动器号。 (5认同)
  • 您可以在[此处](https://pureinfotech.com/list-environment-variables-windows-10/)找到完整的环境变量列表。 (4认同)

Ale*_* K. 38

你可以%HOMEDRIVE%%HOMEPATH%为驱动器+ \docs settings\username\users\username.

  • 此答案适用于以本地系统帐户运行的服务。在这种情况下,%userprofile%不会。 (2认同)

RBT*_*RBT 11

您可以使用%systemdrive%%homepath%环境变量来完成此任务.

连接时的两个命令变量为您提供所需用户的主目录路径,如下所示:

  1. echo %systemdrive%在命令提示符下运行给出:

    C:
    
    Run Code Online (Sandbox Code Playgroud)
  2. echo %homepath%在命令提示符下运行给出:

    \Users\<CurrentUserName>
    
    Run Code Online (Sandbox Code Playgroud)

当一起使用时,它变成:

C:\Users\<CurrentUserName>
Run Code Online (Sandbox Code Playgroud)

  • 在Windows中,您可以将整个用户文件夹移动到另一个驱动器(例如:D:\ MyUser).在这些情况下,%systemdrive %% homepath%将失败.应该使用%HOMEDRIVE %% HOMEPATH%. (6认同)
  • @EdwardFalk我已经修复了我的答案.我错过了提到`%systemdrive%`环境变量,相当于Alex提到的`%homedrive%`.如果您发现任何错误,请给我您的反馈意见. (2认同)
  • 所以在常见情况下,他们给出相同的答案。在不常见的情况下,只有“%HOMEDRIVE%%HOMEPATH%”是正确的答案。因此,在所有情况下,“%HOMEDRIVE%%HOMEPATH%”都是正确的答案,我建议相应地更改您的答案。 (2认同)
  • 我不明白这个答案如何比亚历克斯的答案增加任何内容。 (2认同)

Chr*_*ght 9

更新 - 2019 年 7 月 18 日的更好版本

最后总结一下,尽管我已经在大多数 Windows 控制台工作中转移到了 powershell,但我决定解决这个旧的 cmd 问题,我今天不得不使用 cmd 控制台,而这个功能的缺乏确实让我感到震惊。这个最终也适用于空格,我之前的答案会失败。

此外,这个现在也可以使用 ~ 作为其他主子文件夹的前缀,并且它还可以将正斜杠交换为反斜杠。所以在这里;

步骤 1. 创建这些doskey宏,每次 cmd 启动时它们都会在某个地方被拾取。

DOSKEY cd=cdtilde.bat $* 
DOSKEY cd~=chdir /D "%USERPROFILE%"
DOSKEY cd..=chdir ..
Run Code Online (Sandbox Code Playgroud)

步骤 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%"
Run Code Online (Sandbox Code Playgroud)

测试良好;

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")
Run Code Online (Sandbox Code Playgroud)

哦,它还允许延迟引用,我发现这很有用,即使文件夹路径名中有空格,因为它将所有参数包装起来,就好像它是一个长字符串一样。这意味着只有初始引用也有效,或者完全没有引用也有效。

下面的所有其他内容现在可能会被忽略,这是由于历史原因留下的 - 所以我不会再犯同样的错误


旧更新 2018
年10 月 19 日。万一其他人尝试了我的方法,我下面的原始答案没有处理空格,例如,以下失败。

> cd "c:\Program Files"
Files""]==["~"] was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

我认为必须有办法解决这个问题。如果我可以改进我的答案,将再次发布。(见上文,我终于按照我想要的方式完成了所有工作。)


我的原始答案,仍然需要工作...... 2018
年10 月 7 日。我今天只是想这样做,我想我明白了,这就是我认为效果很好的方法;

首先,一些doskey宏;

DOSKEY cd=cdtilde.bat $* 
DOSKEY cd~=chdir /D "%USERPROFILE%"
DOSKEY cd..=chdir ..
Run Code Online (Sandbox Code Playgroud)

然后是我路径中的一个 bat 文件;

cdtilde.bat

@echo off
if ["%1"]==["~"] ( 
    chdir /D "%USERPROFILE%"
) else ( 
    chdir /D %* 
)
Run Code Online (Sandbox Code Playgroud)

所有这些似乎都运行良好;

cd ~ (traditional habit)
cd~  (shorthand version)
cd.. (shorthand for going up..)
Run Code Online (Sandbox Code Playgroud)