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


215

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

Answers:


324

您会失望的: %userprofile%

但是,您可以使用其他终端。我相信您可以在XP及更高版本上安装Powershell(并随Win7一起预装),它使您可以~用于主目录。



15

您可以使用%systemdrive%%homepath%环境变量来完成此操作。

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

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

    C:
    
  2. echo %homepath%在命令提示符下运行会给出:

    \Users\<CurrentUserName>
    

当一起使用时,它变成:

C:\Users\<CurrentUserName>

您还需要%homedrive%; 请参阅上方的Alex K的答案
爱德华·福尔克

2
@EdwardFalk我已经确定答案。我错过了提到%systemdrive%环境变量的内容,而环境变量与%homedrive%Alex提到的等效。如果您发现任何不正确的地方,请务必对此提供反馈。
RBT

8
在Windows中,您可以将整个用户文件夹移动到另一个驱动器(例如:D:\ MyUser)。在这些情况下,%systemdrive %% homepath%将失败。应该改用%HOMEDRIVE %% HOMEPATH%。
丹尼尔·桑托斯

真正。有可能,但是人们改变这些标准环境变量并不是那么常见。在通常的公司环境中,这些环境变量由IT部门通过此处此处提到的AD组策略来控制
RBT

6

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

最后的总结,尽管无论如何我已经开始使用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")

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

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


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

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

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


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

首先,一些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..)

此答案提供了一种使用.bashrc-type文件启动CMD的方法:superuser.com/questions/144347/…。将步骤1.从此答案放入bashrc.bat文件将在启动时进行设置。
Brydenr

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



-5

您也可以执行cd ...... \多次,因为有很多文件夹可以将您带到主目录。例如,如果您在cd:\ windows \ syatem32中,则cd .... \带您回家,即c:\


2
home!= c:\而是原始海报询问C:\Users\username文件夹(或c:\Documents and Settings\username在较早的Windows中)
v.karbovnichy

即使您想扎根C:\ ,也建议使用cd \ 而不是不确定的数量cd ..\..\..
lcnittl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.