201 votes

Lot: Enlevez l'extension de fichier

J'ai le lot suivant de script à partir de Wikipedia:

@echo off
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%f
)
pause

Dans la boucle tous les fichiers avec l'extension flv obtenir un écho, mais je veux le faire certaines actions avec le fichier(s) là où j'ai besoin une fois que le fichier sans l'extension) et une fois avec l'extension. Comment pourrais-je avoir les deux?

J'ai cherché des solutions mais je n'ai pas à en trouver un. Je suis un vrai newbie dans le lot...

391voto

0xA3 Points 73439

Vous pouvez utiliser %%~nf pour obtenir le nom de fichier tel que décrit dans la référence pour l' for:

@echo off
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%~nf
)
pause

Les options suivantes sont disponibles:

Variable avec le modificateur Description

%~I Étend %I en ce qui retire toute environnantes 
 les guillemets ("").
%~fI Étend %I en nom de chemin d'accès qualifié.
%~dI Étend %I une lettre de lecteur.
%~pI Étend %I en chemin.
%~nI Étend %I en nom de fichier.
%~xI Étend %I en l'extension de fichier.
%~sI Élargit chemin pour contenir uniquement des noms courts.
%~ia Étend %I les attributs de fichier de fichier.
%~tI Étend %I la date et l'heure du fichier.
%~zI Étend %I la taille de fichier.
%~$PATH:je Recherche les répertoires listés dans la variable d'environnement PATH 
 variable et étend %I en nom de 
 le premier trouvé. Si le nom de variable d'environnement est 
 pas défini ou que le fichier n'est pas trouvé par la recherche,
 ce modificateur s'étend une chaîne de caractères vide. 

41voto

Ohad Schneider Points 10485

Dans le cas où le fichier de votre variable contient n'existe pas réellement l' FOR approche ne fonctionnera pas. Un truc que vous pourriez utiliser, si vous connaissez la longueur de l'extension, est de prendre une sous-chaîne:

%var:~0,-4%

l' -4 signifie que les 4 derniers chiffres (sans doute .ext) sera tronqué.

14voto

Vineet Points 984

Je suis aussi un étranger pour windows cmd, mais essayez ceci:

echo %%~nf

9voto

snot waffle Points 457

C'est vraiment une réponse tardive, mais je suis venu avec cette pour résoudre un problème particulier que j'ai eu avec DiskInternals LinuxReader en ajoutant".efs_ntfs " pour les fichiers qu'il a sauvé non NTFS (FAT32) les répertoires :

@echo off
REM %1 is the directory to recurse through and %2 is the file extension to remove
for /R "%1" %%f in (*.%2) do (
    REM Path (sans drive) is given by %%~pf ; drive is given by %%~df
    REM file name (sans ext) is given by %%~nf ; to 'rename' files, move them
    move "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf"
    echo "%%~df%%~pf%%~nf.%2" renamed to "%%~df%%~pf%%~nf"
echo.
)
pause

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X