18

を使用して各ファイルを反復処理している場合:

@echo off

FOR %%f IN (*\*.\**) DO (
    echo %%f
)

各ファイルの拡張子を印刷するにはどうすればよいですか? %%f を一時変数に割り当ててから、コード :echo "%t:~-3%"を使用して印刷しようとしましたが、成功しませんでした。

4

3 に答える 3

36

FOR コマンドには、ファイル名を変更できる組み込みスイッチがいくつかあります。次のことを試してください。

@echo off
for %%i in (*.*) do echo "%%~xi"

詳細についてhelp forは、修飾子の完全なリストを取得するために使用してください - かなりの数があります!

于 2008-09-26T11:22:49.083 に答える
7

これは動作しますが、驚くほど高速ではありません。

@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
于 2008-09-26T11:39:35.177 に答える
3

サムの答えは間違いなくあなたが望むものにとって最も簡単です。しかし、私は追加したかった:

以前に発行したことがない限り、aのset内に変数を入れないでください。すぐに使用することを期待してください。()for

setlocal ENABLEDELAYEDEXPANSION

!変数名をラップするために%の代わりに使用しています。例えば、

@echo off
setlocal ENABLEDELAYEDEXPANSION

FOR %%f IN (*.*) DO (

   set t=%%f
   echo !t:~-3!

)

チェックアウト

set /?

詳細については。

もう1つの方法は、 Paxが示すsetように、サブルーチンを呼び出してを実行することです。

于 2009-04-03T05:02:08.073 に答える