質問

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

@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

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

for ()内の変数を set しないでください。以前に発行された

setlocal ENABLEDELAYEDEXPANSION

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

@echo off
setlocal ENABLEDELAYEDEXPANSION

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

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

)

チェックアウト

set /?

詳細情報。

他の代替方法は、 Pax が示すように、 set を実行するサブルーチンを呼び出すことです。 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top