批量编程:在循环时多次调用函数和检索结果

时间:2012-08-03 14:28:18

标签: batch-file

我有一个批量脚本,我循环通过文件夹中的所有文件名然后我调用一个命令,以便从文件名中删除扩展名。我希望在每次迭代时将文件名(不带扩展名)存储在名为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

1 个答案:

答案 0 :(得分: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!"
)