を使用して各ファイルを反復処理している場合:
@echo off
FOR %%f IN (*\*.\**) DO (
echo %%f
)
各ファイルの拡張子を印刷するにはどうすればよいですか? %% fを一時変数に割り当ててから、次のコードを使用してみました:echo "%t:~-3%"
印刷しますが、成功しません。
FORコマンドには、ファイル名を変更できるいくつかの組み込みスイッチがあります。次のことを試してください。
@echo off
for %%i in (*.*) do echo "%%~xi"
詳細については、help for
を使用して、修飾子の完全なリストを取得してください。かなりの数があります。
これは機能しますが、目がくらむほど高速ではありません。
@echo off
for %%f in (*.*) do call :procfile %%f
goto :eof
:procfile
set fname=%1
set ename=
:loop1
if "%fname%"=="" (
set ename=
goto :exit1
)
if not "%fname:~-1%"=="." (
set ename=%fname:~-1%%ename%
set fname=%fname:~0,-1%
goto :loop1
)
:exit1
echo.%ename%
goto :eof
Sam の答えは、あなたが望むものにとって間違いなく最も簡単です。しかし、私は追加したかった:
set
の()
内の変数をfor
しないでください。以前に発行したことがない限り、すぐに使用することを期待してください。
setlocal ENABLEDELAYEDEXPANSION
変数名をラップするために%の代わりに!
を使用しています。例えば、
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
set t=%%f
echo !t:~-3!
)
チェックアウト
set /?
詳細については。
もう1つの方法は、 Pax が示すように、サブルーチンを呼び出してset
を実行することです。