2015-12-20 1 views
1

Je suis incapable de trouver quoi que ce soit à ce sujet sur le net. Par exemple, quand je suis dans C:\PROGRA~1> je voudrais l'étendre à C:\Program Files>. Aussi, je voudrais changer d'un autre côté, quand je suis en C:\Program Files> pour le court-circuiter à C:\PROGRA~1>. Notez que je parle de cmd et quand je suis en cmd et en passant par les fichiers et les dossiers, pas dans le fichier batch.Étendre et raccourcir le chemin du fichier du cmd actuel

+1

Cela ressemble étrangement à un [problème XY] (http://xyproblem.info/) pour moi. Aussi, quand vous dites "je parle de cmd ... pas dans le fichier batch", cela dit que cette question est probablement mieux adaptée pour SuperUser. – rojo

+2

Si vous ne voulez pas de solution de traitement par lots, n'ajoutez pas de fichier batch comme balise. Et étant donné cette contrainte, rojo est correct, cette question appartient à SuperUser. – dbenham

+0

Est-ce que vous cdez sur "C: \ PROGRA ~ 1" ou sur "C: \ Program Files" lorsque vous entrez pour la première fois dans le répertoire? –

Répondre

2

chose la plus proche que je peux penser est

cd "\Program Files" 
for %I in (.) do @echo %~sI 

pour afficher le répertoire courant en format de nom court. Je ne pense pas qu'il existe un moyen natif d'interprète cmd pour développer un nom de chemin d'accès court, mais vous pouvez abuser de PowerShell à partir de la console cmd.

cd \PROGRA~1 
powershell "(pwd).path" 

Pour obtenir une liste de répertoires contenant les noms de répertoire courts, dir /X

+1

Belle astuce avec la powershell. Il est difficile d'obtenir le chemin complet/long avec le lot pur mais c'est possible. Vérifiez la réponse de dbenham [ici] (http://stackoverflow.com/questions/18654988/get-full-path-and-long-file-name-from -short-file-name) – npocmaka

0

Je suis comprends pas bien votre question. Si vous souhaitez contrôler le chemin d'accès apparaît dans cmd, l'une des options est d'utiliser prompt. Par exemple, dans le cas où vous souhaitez cacher le chemin entier et au lieu que vous voulez que > apparaisse, vous pouvez effectuer les opérations suivantes

prompt $g

Le résultat est

C:\Users\XXXXXX\Desktop\XXXXX>prompt $g 
> 

Pour montrer le chemin du dossier actuel, vous utilisez prompt $n. Pour toutes les options, vous pouvez imprimer la liste sous la forme prompt /?

1

Il n'y a aucune commande native avec le comportement indiqué.

L'invite indique le chemin actuel en fonction de l'atteinte du répertoire actif actuel. Passer à la représentation courte est une tâche facile (vous n'avez besoin que d'une commande for pour récupérer le nom abrégé), mais pour passer à la représentation longue, un chemin d'accès complet est requis pour chaque dossier du chemin sous sa forme longue.

Vous pouvez inclure un fichier de commandes quelque part dans votre chemin (pour faciliter les appels) pour gérer la tâche. Quelque chose comme (change short <-> long quand appelé)

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem check if short and long references to current directory do not match 
    for /d %%x in (".") do if /i not "%%~sx"=="%%~fx" (
     endlocal 
     echo Changing to short path 
     cd "%%~sx" 
     goto :eof 
    ) else (
     rem Retrieve current active directory information for later use 
     set "fullPath=%%~dx" 
     set "folders=%%~fx" 
    ) 

    rem Prepare to enumerate folders from top to bottom. 
    rem For each of the levels, we will use a wildcard on the short name. 
    rem The wildcard expansion will retrieve the long name of this level. 
    rem The rest is just folder names concatenation and delayed expansion 
    rem enable/disable to avoid problems with folders containing 
    rem "!" in their names. 

    set "folders=%folders:*\=%" 
    setlocal enabledelayedexpansion 
    for %%a in ("!folders:\=" "!") do for %%f in ("!fullPath!") do (
     endlocal 
     rem Use a wildcard to search a folder matching the current level 
     for /d %%c in ("%%~f\%%~a?") do if /i "%%~snxc"=="%%~a" (
      rem Matching folder found. Save its long name 
      setlocal enabledelayedexpansion 
      for %%d in ("!fullPath!") do (
       endlocal 
       set "fullPath=%%~d\%%~nxc" 
      ) 
     ) 
     setlocal enabledelayedexpansion 
    ) 
    endlocal 

    rem Search done. Check if a directory change is needed 
    for /d %%a in (".") do for /d %%b in ("%fullPath%") do if not "%%~fa"=="%%~fb" (
     endlocal 
     echo Changing to long path 
     cd "%fullPath%" 
    )