Quelle est l'alternative pour ~ (répertoire personnel de l'utilisateur) sur l'invite de commande Windows?

216

J'essaie d'utiliser l'invite de commande pour déplacer certains fichiers, je suis habitué au terminal linux où j'utilise ~pour spécifier le répertoire personnel que j'ai consulté partout mais je n'arrivais pas à le trouver pour l'invite de commande Windows ( Documents and Settings\[user])

fenerlitk
la source

Réponses:

326

Vous allez être déçu: %userprofile%

Vous pouvez cependant utiliser d'autres terminaux. Powershell, que je crois que vous pouvez obtenir sur XP et versions ultérieures (et est préinstallé avec Win7), vous permet d'utiliser ~pour le répertoire personnel.

Geai
la source
39

Vous pouvez %HOMEDRIVE%%HOMEPATH%pour le lecteur + \docs settings\usernameou \users\username.

Alex K.
la source
3
Cette réponse a fonctionné pour un service s'exécutant en tant que compte système local. % userprofile% dans ce cas ne le fait pas.
DonBecker
15

Vous pouvez utiliser %systemdrive%%homepath% la variable d'environnement pour accomplir cela.

Les deux variables de commande, lorsqu'elles sont concaténées, vous donnent le chemin du répertoire personnel de l'utilisateur souhaité comme ci-dessous:

  1. L'exécution echo %systemdrive%à l'invite de commande donne:

    C:
    
  2. L'exécution echo %homepath%à l'invite de commande donne:

    \Users\<CurrentUserName>
    

Lorsqu'il est utilisé ensemble, il devient:

C:\Users\<CurrentUserName>
RBT
la source
vous aurez également besoin de% homedrive%; voir la réponse d'Alex K, ci
Edward Falk
2
@EdwardFalk J'ai corrigé ma réponse. J'avais manqué de mentionner %systemdrive%la variable d'environnement qui est équivalente à celle %homedrive%mentionnée par Alex. Veuillez me faire part de vos commentaires à ce sujet si vous trouvez quelque chose de incorrect.
RBT
8
Dans Windows, vous pouvez déplacer l'intégralité de votre dossier utilisateur vers un autre lecteur (Ex: D: \ MyUser). Dans ces scénarios,% systemdrive %% homepath% échouera. % HOMEDRIVE %% HOMEPATH% doit être utilisé à la place.
Daniel Santos
Vrai. C'est possible mais ce n'est pas habituel pour les gens de changer ces variables d'environnement standard. Dans un environnement d'entreprise habituel, ces variables d'environnement sont régies par le service informatique via des stratégies de groupe AD, comme mentionné ici et ici .
RBT
6

Mise à jour - meilleure version 18 juillet 2019.

Résumé final, même si je suis passé à PowerShell pour la plupart des travaux sur console Windows, mais j'ai décidé de terminer ce vieux problème de cmd, j'ai dû utiliser une console cmd aujourd'hui, et le manque de cette fonctionnalité m'a vraiment frappé. Celui-ci fonctionne enfin avec les espaces également, où ma réponse précédente échouerait.

De plus, celui-ci peut désormais également utiliser ~ comme préfixe pour d'autres sous-dossiers personnels, et il échange également les barres obliques vers les barres obliques inverses. Le voici donc;

Étape 1. Créez ces macros doskey , quelque part, elles sont récupérées à chaque démarrage de cmd.

DOSKEY cd=cdtilde.bat $* 
DOSKEY cd~=chdir /D "%USERPROFILE%"
DOSKEY cd..=chdir ..

Étape 2. Créez le fichier cdtilde.bat et placez-le quelque part dans votre 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%"

Testé très bien avec;

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

Oh, cela permet également des citations paresseuses, ce que j'ai trouvé utile, même lorsque les espaces sont dans les noms de chemin de dossier, car il encapsule tous les arguments comme s'il s'agissait d'une longue chaîne. Ce qui signifie que juste un devis initial fonctionne également, ou complètement sans devis.

Toutes les autres choses ci-dessous peuvent être ignorées maintenant, elles sont laissées pour des raisons historiques - donc je ne fais plus les mêmes erreurs


ancienne mise à jour du 19 octobre 2018.
Au cas où quelqu'un d'autre aurait essayé mon approche, ma réponse d'origine ci-dessous ne gérait pas les espaces, par exemple, ce qui suit a échoué.

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

Je pense qu'il doit y avoir un moyen de résoudre ce problème. Publiera à nouveau si je peux améliorer ma réponse. (voir ci-dessus, j'ai finalement tout fait fonctionner comme je le voulais.)


Ma réponse originale, avait encore besoin de travail ... 7 octobre 2018.
J'essayais juste de le faire aujourd'hui, et je pense que je l'ai, c'est ce que je pense qui fonctionne bien;

Tout d'abord, quelques macros doskey ;

DOSKEY cd=cdtilde.bat $* 
DOSKEY cd~=chdir /D "%USERPROFILE%"
DOSKEY cd..=chdir ..

puis un fichier bat sur mon chemin;

cdtilde.bat

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

Tout cela semble bien fonctionner;

cd ~ (traditional habit)
cd~  (shorthand version)
cd.. (shorthand for going up..)
Christopher Plewright
la source
Cette réponse permet de démarrer CMD avec un .bashrcfichier de type: superuser.com/questions/144347/… . Mettre l'étape 1 de cette réponse dans le bashrc.batfichier le définira au démarrage.
Brydenr
2

Si vous voulez une version plus courte de Jay, vous pouvez essayer

    set usr=%userprofile%
    cd %usr%

Ou vous pouvez même utiliser % u% si vous le souhaitez. Il enregistre quand même quelques frappes.

Scotty J
la source
2

Vous pouvez faire presque la même chose vous-même. Ouvrez Variables d'environnement et cliquez sur le bouton "Nouveau" dans les "Variables utilisateur pour ...".
Nom de la variable: ~
Valeur de la variable: cliquez sur le bouton "Parcourir le répertoire ..." et choisissez le répertoire souhaité.

Et après cela, ouvrez cmd et tapez ceci:
cd% ~%
. Ça marche.

hkaraoglu
la source
2

Je viens d'essayer set ~=%userprofile%et ça marche aussi si vous voulez continuer à utiliser la même habitude

Vous pouvez ensuite utiliser à la %~%place.

Mark Richer
la source
2
Comment définissez-vous exactement la valeur de ~= %userprofile%? J'ai exécuté la commande exacte mentionnée dans votre message sur l'invite de commande, mais elle génère une erreur - '~' is not recognized as an internal or external command, operable program or batch file.. Pouvez-vous développer votre réponse un peu plus?
RBT
3
Si vous utilisez, set ~=%userprofile%vous pouvez utiliser %~%pour la variable
forresthopkinsa
0

Nous venons d'écrire un script pour le faire sans trop taper tout en conservant la portabilité car le paramétrage ~doit %userprofile%nécessiter une configuration manuelle sur chaque PC Windows tandis que le clonage et la configuration du répertoire dans le cadre de la PATHsont mécaniques.

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

frites
la source
0

Simplement

Premier chemin défini

doskey ~=cd %homepath%

Ensuite, accédez

~
Matee Gojra
la source
-5

Vous pouvez également faire cd ...... \ autant de fois qu'il y a de dossiers qui vous amènent au répertoire personnel. Par exemple, si vous êtes dans cd: \ windows \ syatem32, alors cd .... \ vous amène à la maison, c'est-à-dire c: \

samvatsar
la source
2
home! = c: \ Au lieu de cela, l'affiche originale pose des questions sur le C:\Users\usernamedossier (ou c:\Documents and Settings\usernamedans les versions antérieures de Windows)
v.karbovnichy
Même si vous vouliez aller à la racine, C:\ il est plutôt conseillé d'utiliser cd \ au lieu d'un nombre indéfini decd ..\..\..
lcnittl