Convertissez le nom de fichier long en nom de fichier court (8.3) en utilisant 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:

court.MTD :

@echo OFF
echo %~s1

L'Appel de short.bat C:Documents and SettingsUserNTUSER.DAT retourne C:DOCUM~1USERNTUSER.DAT

Cependant, je n'aime pas avoir un autre .chauve-souris, en fichier pour cette. Je préfère appeler cmd.exe avec toute la commande d'un script ruby. Comment puis-je faire cela?

Comme étape intermédiaire, j'ai essayé de coder en dur le chemin dans le fichier batch, mais c'est le cas pas de travail:

Court1.MTD :

@echo OFF
SET filename="C:Documents and SettingsUserNTUSER.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.chauve-souris fonctionne, comment puis-je convertir cela en un one-liner qui peut être appelé 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
demandé sur Community 2012-04-19 15:35:37

2 réponses

cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
41
répondu dbenham 2012-04-19 12:08:20

Remplacez le nom de fichier.txt au nom de fichier que vous souhaitez convertir en 8.3

dir /x filename.txt

Vous devrez alors diviser le résultat avec des espaces comme délimiteur (\s dans 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
répondu Robert Louis Murphy 2012-04-19 12:03:23