2009-08-28 16 views
0

私のバッチファイルに、ユーザーが次のような状況で入力したファイルの拡張子を認識したいとします。CMD:ファイル拡張子の認識?

ユーザーは、フォルダまたは.zip/.rarファイルを入力する必要があります。

そのフォルダ場合、それは、GOTOを使用する必要があります。フォルダ をそのA .zipファイル/ .rarを、それはGOTO使用する必要がある場合:ziprar

を(言おうとしていけないよりも、サードパーティ製のソフトウェアなしで可能である場合それについてしてください)

+1

は、私はバッチより現代的で柔軟な言語への移行をお勧めかもしれませんか?バッチをとどめる魅力的な理由はありますか? – EBGreen

+0

いいえ、しかし、私はすでにバッチ内の何かのための余分なユーティリティを使用し、それ以外の場合は、ユーティリティがいっぱいになるだろう。 –

+1

私はVBScript/JScriptに移行することをお勧めします。 – EBGreen

答えて

3

あなたは、ファイルの拡張子を取得するために使用できる環境変数から部分文字列を抽出することができます。ユーザーはつまり、バッチファイルへのパラメータとしてパスを指定することができる場合

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

ありがとう、魅力的な作品 –

1

を"%〜1"はそれほど簡単ではないので、最良の選択肢です私はHelenの答えに対するコメントで言ったように、 "%filename%"よりもmaticです。あなたは、パラメータを使用することができない場合は、私が思い付くことが最高です、

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

:原因有効なファイル名が存在している可能性があり

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 

それは次のようになります構文エラーが発生しましたが、私の限られたテストでは見つけられませんでした。

また、ファイルの拡張子をチェックするのではなく、基本的なフォルダのチェックを検討する必要があります:

IF EXIST "%~1\*" (goto folder) ELSE goto ziprar 
関連する問題