Récupérer un nom 8.3 [BATCH]
facedepoulet
-
Ben -
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.
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.
A voir également:
- Récupérer un nom 8.3 [BATCH]
- Comment recuperer un message supprimé sur whatsapp - Guide
- Comment récupérer un compte facebook piraté - Guide
- Fichier batch - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment recuperer une video sur youtube - Guide
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
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
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
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
hello
pour afficher un nom court
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
)
Bonjour,
l'affichage de ton code est le suivant :
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 :
N'hésitez pas à proposer des solutions !
Il existe certainement d'autres manières de le coder ...
++
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 ...
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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:>
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 !
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 !