109 votes

Comment puis-je trouver le chemin court d'un répertoire/fichier Windows ?

Je dois utiliser des noms de chemin raccourcis pour une application que j'utilise. Par exemple, j'ai besoin de C:\PROGRA~1\ au lieu de C:\Program Files. Le programme ne peut pas gérer les espaces et n'acceptera pas les chemins entre guillemets (par exemple "C:\Program Files").

Si cela peut aider, j'utilise Windows 7. Je peux accéder à n'importe quelle version depuis XP, si nécessaire.

106voto

Oliver Points 125

Commencez et tapez cmd dans la boîte d'exécution. Démarrez cmd et utilisez cd pour accéder au dossier qui vous intéresse :

cd \

Ensuite

dir /x

C:\>dir /x

13/10/2011  09:14 AM

1 votes

Alors vous faites cela pour chaque sous-dossier dans le chemin?

0 votes

@endolith L'interrupteur /s effectue une récursion de sous-dossiers

6 votes

Je veux dire comment afficher le chemin complet de 8.3?

62voto

SSpoke Points 681

Créez un fichier de lot dans un répertoire pratique, puis vous pourrez copier-coller le chemin court à partir de ce chemin.

Vous pourriez simplement exécuter command.com et continuer à effectuer des commandes cd vers votre répertoire actuel également.

Dans les scripts batch Windows, %~s1 développe les paramètres de chemin en noms courts. Créez ce fichier de lot:

@ECHO OFF
echo %~s1

J'ai appelé le mien shortNamePath.cmd et l'appelle de cette façon:

C:\> shortNamePath "c:\Program Files (x86)\Android\android-sdk"
c:\PROGRA~2\Android\ANDROI~1

Voici une version qui utilise le répertoire actuel si aucun paramètre n'a été fourni:

@ECHO OFF
if '%1'=='' (%0 .) else echo %~s1

Appelé sans paramètres:

C:\Program Files (x86)\Android\android-sdk> shortNamePath
C:\PROGRA~2\Android\ANDROI~1

Utilisation de SET et d'une variable nommée

L'invite de commande Windows a quelques conventions pour manipuler des variables avec des espaces dans leurs valeurs qui sont un peu difficiles à apprendre et à comprendre, surtout si vous avez une expérience Unix. Vous pouvez faire

SET TESTPATH=c:\Program Files (x86)\Android\android-sdk

(sans guillemets), ou

SET "TESTPATH=c:\Program Files (x86)\Android\android-sdk"

(notez le placement non intuitif des guillemets); ensuite

CALL :testargs "%TESTPATH%"

:testargs
echo %~s1
goto :eof

12 votes

Vraiment utile, devrait être marqué comme réponse!

0 votes

Merci! Est-ce faisable en utilisant une commande SET ? comme SET AAA=C:\program files\quoi que ce soit\un autre espace au milieu\ à la version courte

0 votes

@Li3ro Je n'ai pas réussi à comprendre la commande de variable SET, mais j'étais très proche, tu peux le voir en bas de la réponse, il a juste besoin d'un petit ajustement. Je ne suis pas familier avec la programmation de scripts batch donc je ne sais pas comment faire.

27voto

Ivan Schwarz Points 349

Voici une ligne:

cmd /c for %A in ("C:\Program Files") do @echo %~sA

Décodage:

  • cmd /c - Démarre une nouvelle instance de l'interpréteur de commandes Windows, exécute la commande spécifiée par la chaîne, puis se termine.
  • Commande for %%paramètre in (ensemble) do - Exécute conditionnellement une commande plusieurs fois.
  • echo - Affiche des messages à l'écran. Le symbole @ est le même que ECHO OFF appliqué à la ligne actuelle uniquement.
  • %~s - Le chemin étendu contient uniquement des noms courts.

Sources:

3 votes

Super!!! Vous pouvez remplacer "C:\Program Files" par . pour obtenir le nom court du répertoire actuel

2 votes

Quand/pourquoi auriez-vous besoin de la commande cmd /c? Si vous êtes dans une fenêtre d'invite de commandes, vous pouvez simplement taper la commande for%A in ("C:\ProgramFiles") do @echo%~sA, et si vous tapez cela dans la boîte de dialogue "Exécuter", le résultat disparaît avant que vous puissiez le lire.

4 votes

Bien joué; comme le souligne @Scott, vous n'avez pas besoin du cmd /c lorsque vous exécutez depuis cmd; vous en avez besoin depuis PowerShell, mais ensuite vous devez également mettre les jetons après /c entre '...' : cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'

14voto

Eino Mäkitalo Points 299

J'ai trouvé un moyen très pratique de résoudre le chemin d'accès court du répertoire actuel (ou autre chose) si vous avez PowerShell installé.

Ouvrez simplement PowerShell dans le répertoire actuel

  • dans la fenêtre cmd, tapez powershell

  • si vous avez un dossier ouvert dans l'interface graphique, vous pouvez taper cmd.exe ou powershell.exe directement dans la barre d'adresse du dossier.

Ensuite, donnez la commande

(Nouvel objet -ComObject Scripting.FileSystemObject).GetFolder(".").ShortPath

Origine de l'information : [[https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303\]](https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303])

1 votes

Merci! J'ai dû utiliser (New-Object -ComObject Scripting.FileSystemObject).GetFolder((Get-Location).Path).S‌​hortPath cependant, car ta version renverrait toujours "C:\Windows\System32".

10voto

freedenizen Points 519

Le "nom court" est en réalité la vieille convention de nommage DOS 8.3, donc tous les répertoires seront les 6 premières lettres suivies de ~1 en supposant qu'il n'y a qu'un seul nom qui corresponde, par exemple :

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\BCDEFG~1    - C:\BCDEFGHIJKL M Another Directory

voici la seule exception

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well

8 votes

Pas vrai. Parfois, moins de caractères sont utilisés, surtout si vous utilisez des caractères asiatiques, tels que le coréen.

1 votes

Je suppose que découvrir lequel est lequel dans le cas "exceptionnel" est le point de la question - surtout que l' "exception" se produit régulièrement dans chaque installation Windows 64 bits, où vous pourriez avoir besoin de savoir lequel parmi Program Files et Program Files (x86) est PROGRA~1 et lequel est PROGRA~2. La réponse de Paul résout ce problème.

2 votes

J'ai tellement de fichiers qui commencent par les mêmes caractères que après quatre d'entre eux (...~4) cela a commencé avec ce qui ressemble à du hachage, par exemple ABxxxx~1 où x était en hexadécimal -- ce qui n'est pas très facile à lire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X