J'ai le script batch suivant de Wikipedia:
@echo off
for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
echo %%f
)
pause
Dans la boucle for, tous les fichiers avec l'extension flv sont répercutés, mais je souhaite effectuer certaines actions avec le (s) fichier (s) pour lesquels j'ai besoin une fois du fichier sans l'extension et une fois avec l'extension. Comment pourrais-je obtenir ces deux?
J'ai cherché des solutions mais je n'en trouve pas. Je suis un vrai débutant dans le lot ...
Vous pouvez utiliser %%~nf
pour obtenir le nom de fichier uniquement, comme décrit dans la référence de for
:
@echo off
for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
echo %%~nf
)
pause
Les options suivantes sont disponibles:
Variable avec modificateur Description % ~ I Développe% I, ce qui supprime les guillemets entourant (""). % ~ FI Développe % I en un nom de chemin complet. % ~ DI Développe% I en une lettre de lecteur uniquement. % ~ PI Étend% I en un chemin uniquement. % ~ NI Développe% I en nom de fichier uniquement. % ~ XI Développe% I en extension de fichier uniquement. % ~ SI Développe le chemin d'accès pour ne contenir que les noms abrégés. % ~ AI Étend% I aux attributs de fichier d'un fichier. % ~ TI Étend% I à la date et à l'heure du fichier. % ~ ZI Agrandit% I à la taille du fichier. % ~ $ PATH: I Recherche dans les répertoires de la variable d’environnement PATH Et développe% I jusqu’au nom complet de Le f premier trouvé. Si le nom de la variable d'environnement est Non défini ou si le fichier n'a pas été trouvé par la recherche, Ce modificateur s'étend à la chaîne vide.
Si le fichier que votre variable contient n’existe pas réellement, l’approche FOR
ne fonctionnera pas. Une astuce que vous pouvez utiliser, si vous connaissez la longueur de l’extension, consiste à prendre une sous-chaîne:
%var:~0,-4%
le -4
signifie que les 4 derniers chiffres (vraisemblablement . ext) seront tronqués.
Je suis également étranger à Windows cmd, mais essayez ceci:
echo %%~nf
C'est une réponse très tardive, mais j'ai proposé cela pour résoudre un problème particulier rencontré avec DiskInternals LinuxReader qui ajoutait '.efs_ntfs' à des fichiers qu'il enregistrait dans des répertoires non NTFS (FAT32):
@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
copy "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf"
echo "%%~df%%~pf%%~nf.%2" copied to "%%~df%%~pf%%~nf"
echo.
)
pause
J'utilise ceci si je veux simplement effacer l'extension d'une variable (sans boucler aucun répertoire ni fichier existant):
for %%f in ("%filename%") do set filename=%%~nf
Si vous souhaitez supprimer l'extension d'un chemin complet, utilisez plutôt %%dpnf
:
for %%f in ("%path%") do set path=%%~dpnf
Exemple:
(Écriture de %
au lieu de %%
pour l'utiliser directement dans la console et non dans un script.)
for %f in ("file name.dat") do echo %~nf
for %f in ("C:\Dir\file.dat") do echo %~nf
REM ===========
REM OUTPUT:
REM file name
REM C:\Dir\file
Utiliser cygwin bash pour couper
:: e.g. FILE=basename.mp4 => FILE_NO_EXT=basename
set FILE=%1
for /f "delims=" %%a in ('bash -c "FILE=%FILE%; echo ${FILE/.*/}" ') do set FILE_NO_EXT=%%a