【问题标题】:Batch file - changing variable value in a for loop批处理文件 - 在 for 循环中更改变量值
【发布时间】:2016-12-09 18:30:30
【问题描述】:

我有以下代码 sn-p

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

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

【问题讨论】:

  • 关于 cmd.exe 如何扩展变量值的常见误解。您需要将变量引用为echo !b!
  • @Squashman 我在我的问题中写道,我已经尝试过了,但没有结果
  • echo !b! 显示文字 !b! 只有两种方式 - 要么您没有使用 setlocal enabledelayedexpansion,要么输入目录中的一个文件名为 !b!.mgc。这些实际上是您的输出可能的唯一两种方式。如果没有设置 b 并且延迟扩展实际上像您声称的那样开启,您会看到错误 ECHO is off.

标签: batch-file for-loop


【解决方案1】:

尝试按照here 的说明将%b% 替换为!b!:

应该延迟扩展的变量应该用感叹号而不是百分号包围。

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

【讨论】:

  • 显然我没有阅读整个问题,但这在 Windows 10 中对我来说很好。
  • 您刚刚发布了与我在问题中使用的完全相同的代码,但说我的代码在 Windows 10 中不适合您。
【解决方案2】:

我相信确凿的证据。我看不到您执行代码,或者您是否完全混淆了代码,所以这是我执行您的代码。就像我说的那样工作。

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>

【讨论】:

  • 你使用的是什么操作系统?
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 2013-10-01
  • 2021-11-04
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多