J'essaie de convertir un nom de fichier long en un nom de fichier court (8.3) sous Windows.
Un fichier batch avec un argument de ligne de commande fonctionne comme prévu:
short.bat :
@echo OFF
echo %~s1
appelant short.bat C:\Documents and Settings\User\NTUSER.DAT
résultats C:\DOCUM~1\USER\NTUSER.DAT
Cependant, je n'aime pas avoir un fichier .bat supplémentaire pour cela. Je préfère appeler cmd.exe
avec toute la commande d'un script Ruby. Comment faire?
Comme étape intermédiaire, j'ai essayé de coder en dur le chemin dans le fichier de commandes, mais cela ne fonctionne pas:
short1.bat :
@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
echo %filename%
fonctionne, mais echo %~sfilename%
donne l'erreur suivante:
The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%
For valid formats type CALL /? or FOR /?
Si short1.bat fonctionne, comment puis-je le convertir en une ligne qui peut être appelée avec cmd.exe \c ...
?
Il y a une autre question ( comment obtenir le chemin DOS au lieu du chemin Windows ), cependant que l'on demande spécifiquement le chemin du répertoire courant.
cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
Remplacez le nom de fichier.txt par le nom de fichier que vous souhaitez convertir en 8.3
dir /x filename.txt
Vous devrez ensuite diviser le résultat avec des espaces comme délimiteur (\ s en regex). Ensuite, la valeur avec le ~ est votre nom de fichier court. Si votre nom de fichier est court pour commencer, vous ne trouverez pas de chaîne contenant un ~.