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

72

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

Si cela aide, j'utilise Windows 7. Je peux avoir accès à n'importe quelle version depuis XP, si nécessaire.

Somehume
la source

Réponses:

77

Cliquez sur Démarrer et tapez cmddans la zone d'exécution. Lancez cmd et utilisez cdpour accéder au dossier qui vous intéresse:

cd \

ensuite

dir /x

C:\>dir /x

13/10/2011  09:14 AM    <DIR>          DOCUME~1     Documents and Settings
13/10/2011  09:05 AM    <DIR>          PROGRA~1     Program Files
Paul
la source
Donc, vous faites cela pour chaque sous-dossier dans le chemin?
endolith
@endolith Le /scommutateur fait la récursion de sous-dossiers
Paul
1
Je veux dire, comment affichez-vous la totalité du chemin 8.3?
endolith
4
@ Paul Cela ne semble pas fonctionner dans Win10. Des idées?
AHungerArtist
2
@AHungerArtist Les noms de fichiers courts n'existent pas nécessairement. leur création peut être désactivée.
Hipponax43
37

Créez un fichier bat dans un répertoire pratique, puis copiez-collez le chemin court à partir de ce chemin.

Vous pouvez simplement exécuter command.comet continuer à exécuter des cdcommandes dans votre répertoire actuel également.

Dans les scripts de lot Windows, %~s1développe les paramètres de chemin d'accès en noms abrégés . Créez ce fichier batch:

@ECHO OFF
echo %~s1

J'ai appelé le mien shortNamePath.cmdet l'appelle comme ça:

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

Voici une version qui utilise le répertoire en cours 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

Utiliser SETet une variable nommée

L'invite de commande Windows contient des conventions relatives à la gestion des variables dont la valeur est un espace difficile à comprendre et à comprendre, notamment si vous avez un arrière-plan Unix. Tu peux 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
Parler
la source
6
Vraiment utile, devrait être marqué comme réponse!
lucaferrario
Merci! Est-ce faisable en utilisant une commande SET? comme SET AAA = C: \ programme \ fichiers \ quoi que ce soit \ autre espace au milieu \ vers la version courte
Li3ro
@ Li3ro Je ne pouvais pas comprendre la méthode de commande variable SET, mais je me suis approché de très près, vous pouvez le voir au bas de la réponse, il vous faut juste un petit correctif. Je ne suis pas dans la programmation de script batch, donc je ne sais pas comment.
Discours prononcé
Ce n'est pas faisable de cette façon. vous avez besoin de la boucle for pour cela
Li3ro
Ceci est plus utile que la réponse acceptée
EvilTeach
8

Le "nom abrégé" correspond en réalité à l'ancienne convention de nommage DOS 8.3. Tous les répertoires seront donc composés des 6 premières lettres suivies en ~1supposant qu'un seul nom correspond, 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
libéré
la source
6
Pas vrai. Parfois, moins de caractères sont utilisés, en particulier si vous utilisez des caractères asiatiques, tels que le coréen.
Arafangion
1
Je suppose savoir que l' on est qui dans le cas « exceptionnel » est le point de la question - d' autant plus que l ' « exception » se produit régulièrement dans chaque installation de Windows 64 bits, vous devrez peut - être savoir qui sur Program Fileset Program Files (x86)est PROGRA~1et qui on est PROGRA~2. La réponse de Paul résout ce problème.
OR Mapper
2
J'ai tellement de fichiers qui commencent par les mêmes caractères qu'après quatre ( ...~4), cela a commencé avec ce qui ressemble à du hachage, par exemple ABxxxx~1où x était hexadécimal - ce qui n'est pas très facile à lire.
Sirap
2
Suggérez-vous que l'utilisateur puisse comprendre les noms abrégés de manière logique en regardant les noms longs? Ce n'est pas vrai. Si je crée ABCDEFGH-CAT, ça prend un nom court ABCDEF~1. Si je crée alors ABCDEFGH-DOG, ça prend un nom court ABCDEF~2. Si je supprime puis ABCDEFGH-CAT, ABCDEFGH-DOG, a encore le nom court ABCDEF~2. Il n'y a aucun moyen de le savoir en regardant les noms longs.
Scott
comme dit, le nom court ne doit pas forcément être composé des 6 premières lettres plus ~1. Consultez la règle utilisée par Windows pour générer des noms abrégés . Et vous pouvez également définir le nom abrégé manuellement avec fsutil, de sorte que les deux noms peuvent n'avoir aucune relation. Laisse les liens durs ou souples
phuclv
7

Voici un one liner :

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

Ventilation :

  • cmd /c - Démarre une nouvelle instance de l'interpréteur de commandes Windows, exécute la commande spécifiée par string puis se termine.
  • for %%parameter in (set) do commande - Effectuer une commande plusieurs fois de manière conditionnelle.
  • echo- Afficher les messages à l'écran. @Le symbole est identique à celui ECHO OFFappliqué à la ligne actuelle uniquement.
  • %~s - Le chemin développé ne contient que des noms abrégés.

Sources :

Ivan Schwarz
la source
1
Agréable!!! Vous pouvez remplacer "C: \ Program Files" par. obtenir le nom abrégé du répertoire en cours
Andrew Steitz
1
Quand / pourquoi aurais-tu besoin du cmd /c? Si vous êtes dans une fenêtre d'invite de commande, vous pouvez simplement taper la for %A in ("C:\Program Files") do @echo %~sAcommande. Si vous la tapez dans la boîte de dialogue "Exécuter", le résultat disparaît avant que vous puissiez le lire.
Scott
1
Bien fait; comme @Scott souligne, vous n'avez pas besoin cmd /clors de l' exécution de cmd; vous en avez besoin de PowerShell , mais vous devez également '...'-closer les jetons après /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0
3

Semblable à la réponse d' Ivan Schwartz , vous pouvez remplacer "C: \ Program Files" par %cd%pour obtenir le répertoire actuel:

cmd /c for %A in ("%cd%") do @echo %~sA  
Eino Mäkitalo
la source
2

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

Il suffit d'ouvrir Powershell dans le répertoire actuel

  • dans cmd windows type 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.

Puis donnez la commande

(New-Object -ComObject Scripting.FileSystemObject).GetFolder(".").ShortPath

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

Eino Mäkitalo
la source
0

Alternativement, vous pouvez utiliser ce petit outil génial appelé PathCopyCopy

En quelques clics, vous pouvez obtenir le chemin d'accès long et court de n'importe quel dossier à partir du menu contextuel, par exemple:

Cliquez avec le bouton droit de la souris sur le dossier de destination => Copier le chemin => Chemin court.

Terminé. Il sera copié dans votre presse-papiers.

Aperçu

Asamoah
la source
0

J'ai installé des modules de nœud en fonctionnant npm installsur un passe-partout. En essayant de supprimer ces dossiers, Windows ne nous permet pas de les supprimer car le chemin est trop long pour pouvoir être traité.

Après quelques recherches superficielles, j'ai pensé que ce serait bien mon propre fragment de code de renommer les dossiers de la racine à la feuille afin qu'il puisse également renvoyer toute exception de violation pour cette tentative.

Ça marche pour moi. Voici le code du projet C #.

    public static int directoryCounterIndex = 0;
    public static void Main(string[] args)
    {
        string dirPath = @"D:\Studies\MeanStack\a\nodem";
        RenameDirectories(dirPath);
    }

    private static void RenameDirectories(string dirPath)
    {
        directoryCounterIndex += 1;
        var newPath = Path.GetDirectoryName(dirPath) + Path.DirectorySeparatorChar + directoryCounterIndex.ToString();
        Directory.Move(dirPath, newPath);
        var subDirectories = Directory.GetDirectories(newPath);
        foreach (var subDirectory in subDirectories)
        {
            RenameDirectories(subDirectory);
        }
    }
Ashok
la source
3
Veuillez relire attentivement la question. Votre réponse ne répond pas à la question initiale.
DavidPostill
0
C:\Users\abcd>subst z: "c:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

C:\Users\abcd>subst
Z:\: => C:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

C’est le moyen le plus simple que j’ai utilisé lorsqu’il s’agit de fichiers contenant des espaces. Il est également accessible à partir de l’explorateur de fichiers et dispose des mêmes privilèges d’accès.

Santhosh Kumar
la source
-2

Il suffit de remplacer les espaces avec

%20

C'est ainsi que les choses sont "traduites" et que les espaces entrent dans% 20.

Si vous avez vraiment besoin de beaucoup, ouvrez simplement votre navigateur et tapez quelque chose comme:

test ";($#< and find the word test, and see that the space is %20 and so on...
utilisateur556501
la source
Je ne pense pas que tu as raison. Cela ne donne pas un résultat positif:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck
3
Vous parlez de quelque chose de complètement différent. Le point principal est que les noms de répertoire et de fichier sont tronqués à 8 caractères. Le navigateur n'a rien à voir avec ça.
Commentaires