在Windows命令提示符中~ (user's home directory)的替代方法是什么?

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

335031 次浏览

你会失望的:%userprofile%

不过,您可以使用其他终端。Powershell,我相信你可以在XP和更高版本上获得(并且预装在Win7中),允许你使用~作为主目录。

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

如果你想要一个比杰的短一点的版本,你可以试试

    set usr=%userprofile%
cd %usr%

或者,如果你愿意,你甚至可以使用% u %。它节省了一些按键。

我刚刚尝试了set ~=%userprofile%,如果你想继续使用相同的习惯,这也是有效的

然后你可以使用%~%代替。

你可以使用% homedrive % % homepath %环境变量来实现这一点。

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

  1. 在命令提示符上运行回声% homedrive %得到:

    C:
    
  2. 在命令提示符上运行回声% homepath %得到:

    \Users\<CurrentUserName>
    

当一起使用% homedrive % % homepath %时,它给出:

C:\Users\<CurrentUserName>

刚刚写了一个脚本来做到这一点,不需要太多的输入,同时保持可移植性,因为将~设置为%userprofile%需要在每个Windows PC上手动设置,而克隆和设置目录作为PATH的一部分是机械的。

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

你自己也可以做同样的事情。打开环境变量,点击“User Variables for…”中的“New”按钮.
变量名: ~
变量值:单击“Browse Directory…”按钮,选择需要的目录。

在这之后,打开cmd并键入以下内容:
< >强cd % ~ %
. 它的工作原理。

你也可以使用cd ......只要有带你到主目录的文件夹,就会有很多次。例如,如果你在cd:\windows\syatem32,那么cd ....\带你到家,那是c:\

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

最后总结,尽管我已经转移到powershell的大多数windows控制台工作,但我决定结束这个旧的cmd问题,我今天必须上一个cmd控制台,这个功能的缺乏真的让我震惊。这个问题最终也适用于空格,而我之前的答案可能会失败。

此外,这个文件夹现在也可以使用~作为其他home子文件夹的前缀,并且还可以将正斜杠转换为反斜杠。就是这样;

步骤1。创建这些dos命令宏,在每次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日 我今天刚试着这么做,我想我做到了,这是我认为很有效的方法;

首先,一些dos命令宏;

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

简单的

首先定义路径

doskey ~=cd %homepath%

然后访问

~

使用%systemdrive%%homepath%%systemdrive%给出驱动器字符(主要是C:),而%homepath%给出用户主目录(\Users\<USERNAME>)。

# cmd
# use:  %USERPROFILE%


# example:
kubectl config --kubeconfig=%USERPROFILE%\.kube\config.xyz view
# powershell
# use:  $env:USERPROFILE


# example
kubectl config --kubeconfig=$env:USERPROFILE\.kube\config.xyz view

cd ~将在windows powershell上正常工作,如果您遇到不支持的命令,请确保您使用的是powershell而不是CMD或使用windows GIT bash。