1

フォルダ内のすべてのファイル名をループしてから、ファイル名から拡張子を削除するコマンドを呼び出すバッチスクリプトがあります。後で再利用できるように、すべての反復でファイル名(拡張子なし)を名前付きの変数に保存したいと思います。result

RemoveExtension関数は正常に動作します。ただし、結果_resultを取得して変数に格納することはできません。印刷すると、常に空になります。ご協力いただきありがとうございます!

@echo OFF
SETLOCAL EnableDelayedExpansion

set "_result="
for /f "delims=" %%i in ('dir "%~1\*.txt" /b') DO (
   echo.filepath: "%~1\%%i"
   call :RemoveExtension "%%i"
   echo._result: "%_result%"  // The "_result" variable is always EMPTY ""
)
goto :eof

:RemoveExtension
SETLOCAL
   REM echo "%~1"
   set "filename=%~1"

   :loop
      if "%filename:~-1%" NEQ "." (
         set "filename=%filename:~0,-1%
         goto :loop
      ) 
   set "filename=%filename:~0,-1%"
   echo "%filename%"
ENDLOCAL & set "_result=%filename%"
goto :eof
4

1 に答える 1

2

これを試してください...拡張機能を削除するはるかに簡単な方法。_resultループ内で変更しているため、の代わりにFORを使用してループにアクセスする必要があります。!%

@ECHO OFF

SETLOCAL EnableDelayedExpansion

SET "_result="
FOR /f "delims=" %%i IN ('dir "%~1\*.txt" /b') DO (
   ECHO.filepath: "%~1\%%i"
   SET _result=%%~ni
   ECHO._result: "!_result!"
)
于 2012-08-03T14:46:14.820 に答える