为了账号安全,请及时绑定邮箱和手机立即绑定

如何在/ F的循环内设置变量

如何在/ F的循环内设置变量

慕婉清6462132 2019-11-02 11:02:07
我写了这段代码dir /B /S %RepToRead% > %FileName%for /F "tokens=*" %%a in ('type %FileName%') do (    set z=%%a    echo %z%    echo %%a)echo %%a工作正常,但echo %z%返回“禁用回声”。我需要设置%z%,因为我想像 %z:~7%有任何想法吗?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

在for循环和括号范围内,有两种方法可以设置和使用变量。


setlocal enabledelayedexpansion看到setlocal /?求助。这仅适用于XP / 2000或更高版本的Windows。然后使用!variable!而不是%variable%循环内...


使用批处理goto标签创建批处理功能:Label。


例:


for /F "tokens=*" %%a in ('type %FileName%') do call :Foo %%a

goto End


:Foo

set z=%1

echo %z%

echo %1

goto :eof


:End

批处理功能是非常有用的机制。


查看完整回答
反对 回复 2019-11-02
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

我为此奋斗了很多小时。这是我注册命令行变量的循环。示例:Register.bat / param1:value1 / param2:value2


它的作用是循环所有命令行参数,并使用正确的名称将变量设置为值。


之后,您可以只使用set value =!param1 !!设置value2 =!param2!


无论给定参数的顺序如何。(所谓的命名参数)。请注意!<> !,而不是%<>%。


SETLOCAL ENABLEDELAYEDEXPANSION


FOR %%P IN (%*) DO (

    call :processParam %%P

)


goto:End


:processParam [%1 - param]


    @echo "processparam : %1"

    FOR /F "tokens=1,2 delims=:" %%G IN ("%1") DO (

        @echo a,b %%G %%H

        set nameWithSlash=%%G

        set name=!nameWithSlash:~1!

        @echo n=!name!

        set value=%%H

        set !name!=!value!

    )

    goto :eof


:End    


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 540 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信