2009-08-28 9 views
0

Je souhaite que mon fichier de traitement par lots reconnaisse l'extension du fichier saisi par l'utilisateur dans la situation suivante:CMD: reconnaissance des extensions de fichiers?

L'utilisateur doit taper un dossier OU un fichier .zip/.rar.

si son dossier, il doit utiliser GOTO: dossier si son .zip/.rar, il doit utiliser GOTO: ziprar

(s'il est possible sans logiciel 3ème partie, que DonT va dire à ce sujet s'il vous plaît)

+1

Puis-je suggérer de passer à une langue plus moderne et plus flexible que lot? Y at-il une raison impérieuse de rester avec le lot? – EBGreen

+0

Non il n'y a pas mais j'utilise déjà un utilitaire supplémentaire pour quelque chose d'autre dans le lot, et sinon il va être à plein d'utilitaires. –

+1

Je suggère vraiment de passer à VBScript/JScript au moins ou même mieux de donner un coup d'oeil à Powershell. – EBGreen

Répondre

3

vous pouvez extraire des sous-chaînes de variables d'environnement, que vous pouvez utiliser pour obtenir l'extension de fichier: Si l'utilisateur peut spécifier le chemin en tant que paramètre dans le fichier batch

set FILENAME=C:\mypath\myfile.rar 
if "%FILENAME:~-4%"==".rar" (
    echo It is a RAR file! 
) else (
    echo Not a RAR file 
) 
+0

merci, fonctionne comme un charme –

1

, qui est la meilleure option depuis "% ~ 1" est moins problématique matic que "% filename%" comme je l'ai dit dans un commentaire à la réponse de Helen. Il ressemblerait à quelque chose comme:

setlocal ENABLEEXTENSIONS 
FOR %%A IN ("%~1") DO (
    IF /I "%%~xA"==".rar" goto ziprar 
    IF /I "%%~xA"==".zip" goto ziprar 
) 
goto folder 

Si vous ne pouvez pas utiliser un paramètre, le mieux que je pouvais trouver est:

setlocal ENABLEEXTENSIONS 
REM set file="f~p 'o%OS%!OS!^o%%o.rar" 
set /p file=Enter a folder path or a zip/rar file name: 
FOR /F "tokens=*" %%A IN ("%file%") DO (
    IF /I "%%~xA"==".rar" goto ziprar 
    IF /I "%%~xA"==".zip" goto ziprar 
) 
goto folder 

Il y a une possibilité qu'il y ait un nom de fichier valide qui provoque erreurs de syntaxe, mais je n'en ai pas trouvé lors de mes tests limités.

Vous pouvez également envisager une vérification de dossier de base plutôt que de vérifier les extensions de fichier:

IF EXIST "%~1\*" (goto folder) ELSE goto ziprar