web-dev-qa-db-fra.com

Convertir un nom de fichier long en nom de fichier court (8.3) à l'aide de cmd.exe

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.

30
user1251007
cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
41
dbenham

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 ~.

5