Shell 读取用于迭代的var%%i的第一个字符

Shell 读取用于迭代的var%%i的第一个字符,shell,batch-file,Shell,Batch File,我想访问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变量中获取第一个字符 谢谢空格在批处理中很重要,请避免在等号之前

我想访问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变量中获取第一个字符


谢谢

空格在批处理中很重要,请避免在等号之前或之后使用空格。
代码中的第二个问题是,在解析块时扩展百分比,而不是在执行块时扩展百分比。
参数的扩展不像
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
)

空格在批处理中很重要,请避免在等号之前或之后使用。
代码中的第二个问题是,在解析块时扩展百分比,而不是在执行块时扩展百分比。
参数的扩展不像
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
)
for/f“tokens=1,2 delims=”%i in(temp.csv)do(
设置“变量=%%i”
呼叫echo%%vari:~0,1%%
)
对于/f“令牌=1,2 delims==”%(临时csv)中的%%i do(
设置“变量=%%i”
呼叫echo%%vari:~0,1%%
)

我只是尝试一下你的代码,在调用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%echo%vari:~0,1%endlocal)和它的写入(例如):命令echo desactiveé~0,1我刚刚复制了您的行
设置变量=%i%
。但现在我将其更正为
%%I
我只是尝试一下你的代码,它只写::~0,1”当调用echo时。我尝试这样做:setlocal DisableDelayedExpansion for/f“tokens=1,2 delims==”%%I in(temp.csv)do(set vari=%I%setlocal EnableDelayedExpansion echo%%echo%vari%echo%echo%vari:~0,1%endlocal)并且它是写的(例如):命令ECHO desactiveé~0,1我刚刚复制了您的行
set vari=%i%
。但现在我将其更正为
%%i