批处理文件 - 更改for循环中的变量值

时间:2016-12-09 18:30:30

标签: batch-file for-loop

我有以下代码段

    setlocal enableextensions enabledelayedexpansion
    set b=123
    for %%f in (.\input\*.mgc) do (
       set "b=%%~nf"
       echo %b%
    )

我希望它输出没有扩展名的文件名,但我总是得到“123”。我总结说它有一些延迟扩展但不太确定问题来自哪里。我也试过echo !b!,但在那种情况下它只输出“!b!”

2 个答案:

答案 0 :(得分:1)

我相信有确凿的证据。我无法看到你执行代码,或者你根本不知道代码,所以这里是我执行你的代码。它就像我说的那样工作。

C:\BatchFiles\SO>type testing.bat
@echo off
setlocal enableextensions enabledelayedexpansion
set b=123
for %%f in (.\input\*.mgc) do (
        echo %%~nf
        set "b=%%~nf"
        echo !b!
)
pause
C:\BatchFiles\SO>dir /b .\input\*.mgc
testfile.mgc

C:\BatchFiles\SO>testing.bat
testfile
testfile
Press any key to continue . . .

C:\BatchFiles\SO>

答案 1 :(得分:1)

尝试按照here所解释的%b%替换!b!

  

应该延迟扩展的变量应该用感叹号代替百分号。

 setlocal enableextensions enabledelayedexpansion
 set b=123
 for %%f in (.\input\*.mgc) do (
     set "b=%%~nf"
     echo !b!
 )