Récupérer un nom 8.3 [BATCH]

facedepoulet -  
 Ben -
Bonjour à tous,

je travaille actuellement sur un fichier de commandes et j'aurais besoin de vos lumières.

Voilà à quoi ça ressemble :

[code]
SET cible=C:\Program files\un nom bien (foireux)\dossier1

IF "%cible:~-1%"=="\" (
echo Le chemin %cible% n'est pas correct ! / Veuillez retirer le "\" final
echo cf variable "cible"
pause
GOTO Fin
)

echo Le chemin court est : ..............
echo.
pause
[/code]

Voilà pour le code.

Le problème :

le chemin comporte une parenthèse fermante (foireux ')' qui entraînera une erreur. (\dossier1 était inattendu)

Mon souci est d'arriver à récupérer un nom court au format 8.3 (C:\progra~1\unnomb~1\dossie~1).

J'ai essayé qch comme ca : echo %~sf%cible% mais sans résultat ...

Un petit coup de pouce serait le bienvenu.

Peut être avec un FOR sur la variable %cible% ... ???

Merci d'avance. Cordialement.

7 réponses

Ben
 
Bonjour à tous, j'ai essayer votre petit bout de script qui marche bien sur un pc mais sur un autre le résultat est pour le moment surprenant !

Voici donc mon script :

@echo off

set cible="D:\Echange\1 Projet SCLE\ATLN\Code uC\projet\Hex\binaire.h86"

for /f %%a in ('echo %cible%') do (
set toto=%%~fsa
)

echo %toto%

pause

Le retour :

D:\Echange\1PROJE~1\ATLN\CODEUC~1\projet\Hex\binaire.h86.h86

Avez-vous une idée de pourquoi il me rajoute une deuxième fois l'extension du fichier ?

Merci d'avance

Benoit
1
karirovax Messages postés 3221 Date d'inscription   Statut Membre Dernière intervention   204
 
salut ;)

mettez le entre guillemets =)

SET cible="C:\Program files\un nom bien (foireux)\dossier1"

pourquoi :

car le Ms-Dos ne gere pas les éspaces ainsi que les noms dépaçants 8 caractères

par exemple dans la commande GOTO elle traite les mots inferieurs ou égal à 8 caractére c-à-d :

GOTO coucouuua est la meme que GOTO coucouuu
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
hello
pour afficher un nom court
@echo off  
set cible="C:\Program files\un nom bien (foireux)\dossier1"  
for  /f "delims=" %%a in ('echo %cible%') do (  
        echo %%~fsa  
)  
0
facedepoulet Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

l'affichage de ton code est le suivant :

C:\PROGRA~1\un nom bien (foireux)\dossier1"


Comme tu le vois le chemin n'est pas complètement court !

J'ai pensé à extraire chaque chaîne et la traiter séparément mais là encore je n'obtiens pas le nom court comme je le veux ...

Je mets le code, peut-être que qqu'un peut trouver l'erreur :

@echo off

:: On renseigne le chemin

SET cible=\\192.168.1.x\un nom (foireux)\Program files\dossier d'install\un autre dossier\repertoire a la noix

:: On extrait chaque "branche" de l'arborescence / Il doit y avoir autant de tokens que de "branches"

FOR /F "tokens=1-6 delims=\" %%a in ("%cible%") do (

IF NOT "%%a"=="" echo %%a>  Extract.txt
IF NOT "%%b"=="" echo %%b>> Extract.txt
IF NOT "%%c"=="" echo %%c>> Extract.txt
IF NOT "%%d"=="" echo %%d>> Extract.txt
IF NOT "%%e"=="" echo %%e>> Extract.txt
IF NOT "%%f"=="" echo %%f>> Extract.txt

)


setlocal ENABLEdelayedEXPANSION

SET compteur=0

echo.

:: On parcourt le fichier contenant le résultat ligne par ligne

FOR /F "tokens=*" %%A in (extract.txt) do  (

SET /a compteur+=1

echo            La branche !compteur! est : %%A

echo Le nom court est ??? / Test : %%~nsA

echo.

)

pause


N'hésitez pas à proposer des solutions !
Il existe certainement d'autres manières de le coder ...

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
pour afficher le nom court, il faut que le répertoire un nom bien (foireux) existe
C:> dir /b/s z 
C:\Documents and Settings\xxx\Mes documents\src\z\un nom bien (foireux) 
C:\Documents and Settings\xxx\Mes documents\src\z\un nom bien (foireux)\dossier1 
C:> bb 
C:\DOCUME~1\xxx~1\MESDOC~1\src\z\UNNOMB~1\dossier1 
C:\DOCUME~1\xxx~1\MESDOC~1\src\z\UNNOMB~1\dossier1 
C:> type bb.bat 
@echo off 

set cible="C:\Documents and Settings\xxx\Mes documents\src\z\un nom bien (foireux)\dossier1" 

for  /f "delims=" %%a in ('echo %cible%') do ( 
        echo %%~sa 
        echo %%~fsa 
) 
C:>
0
facedepoulet Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour dubcek,

merci pour ta réponse. La cible peut changer, c'est pourquoi j'ai créé une variable ...
Si le dossier doit exister pour pouvoir générer un nom court, le fichier de commandes génèrera des erreurs.

J'ai vu que dans PowerBatch il y avait une option pour générer des noms courts mais bien sûr le "convertisseur" n'est pas dans le répertoire d'install, il doit être compilé dans le programme donc impossible d'accéder au code ... :(

Je cherche une manière de convertir n'importe quel nom de dossier/fichier en son équivalent court !

Ca a l'air compliqué surtout quand le nom n'est pas unique !

Explication (Comment Windows transf. les noms longs) :
https://support.microsoft.com/fr-fr/help/142982

Le problème est récurrent, lors de l'utilisation d'un nom long avec des caractères non valides dans une boucle FOR ou avec un IF le programme plantera ! (\dossierXYZ était inattendu)

Le top serait de pouvoir le coder avec des commandes DOS internes uniquement ...

J'ai essayé bcp de méthodes, avec et sans guillemets, avec 1 et plusieurs tokens,
le résultat est décevant.

Certains disent "Te fais pas ch***, code le avec tel langage ou tel autre !"

Le DOS ça pue un peu c'est sûr, c'est pas très puissant mais il peut faire le boulot ...

Je pense qu'il est possible de le faire, si c'est possible la solution existe.

Si quelqu'un a la solution, un bout de code à proposer, je suis preneur !

Merci d'avance !
0
xogno
 
un conseil, met toujours des _ à la place des espaces.
sa evite des problèmes dans le genre :P
0