Récupérer un nom 8.3 [BATCH]

Fermé
facedepoulet - 6 août 2010 à 16:10
 Ben - 4 nov. 2010 à 17:46
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

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 dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
Modifié par karirovax le 6/08/2010 à 21:50
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 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
Modifié par dubcek le 7/08/2010 à 12:53
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 jeudi 13 mars 2008 Statut Membre Dernière intervention 11 août 2010 1
9 août 2010 à 20:02
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 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
Modifié par dubcek le 10/08/2010 à 13:41
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 jeudi 13 mars 2008 Statut Membre Dernière intervention 11 août 2010 1
11 août 2010 à 10:03
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
un conseil, met toujours des _ à la place des espaces.
sa evite des problèmes dans le genre :P
0