【问题标题】:read first char from var %%i from for iteration从 var %%i 中读取第一个字符以进行迭代
【发布时间】:2013-08-08 12:30:11
【问题描述】:

我想在 for 迭代中访问变量中的第一个字符。

这是我的代码:

for /f "tokens=1,2 delims==" %%i in (temp.csv) do (

    set vari = %i% rem >> vari
    echo %vari:~0,1%
)

最后一个回显只写“%”而不是变量的第一个字符。如果我写:

echo %vari:~0,2%

它写的是 %%i 中的整个字符串。

所以我的问题是:如何从 %%i 变量中获取第一个字符?

谢谢

【问题讨论】:

    标签: shell batch-file


    【解决方案1】:

    空格在批处理中很重要,请避免在等号之前或之后使用它们。
    代码中的第二个问题是百分比扩展在解析块时展开,而不是在执行时展开。
    并且参数的扩展不像set vari=%i%那样工作,而是需要使用set vari=%%i

    因此,在这种情况下,您需要对变量进行延迟扩展。

    setlocal DisableDelayedExpansion
    for /f "tokens=1,2 delims==" %%i in (temp.csv) do (
        set "vari=%%i"
        setlocal EnableDelayedExpansion
        echo !vari:~0,1!
        endlocal
    )
    

    【讨论】:

    • 我只是试试你的代码,它只在调用 echo 时写:":~0,1"。
    • 我试试这个: setlocal DisableDelayedExpansion for /f "tokens=1,2 delims==" %%i in (temp.csv) do ( set vari=%i% setlocal EnableDelayedExpansion echo %%i echo %vari% echo %vari:~0,1% endlocal )和它的写(例如): 命令 ECHO 去激活。 ~0,1
    • 我刚刚复制了您的行 set vari=%i%。但现在我更正为%%i
    【解决方案2】:
    for /f "tokens=1,2 delims==" %%i in (temp.csv) do (
        set "vari=%%i"
        call echo %%vari:~0,1%%
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      相关资源
      最近更新 更多