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

我写了这段代码


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%


有任何想法吗?


慕婉清6462132
浏览 544回答 3
3回答

慕神8447489

在for循环和括号范围内,有两种方法可以设置和使用变量。setlocal enabledelayedexpansion看到setlocal /?求助。这仅适用于XP / 2000或更高版本的Windows。然后使用!variable!而不是%variable%循环内...使用批处理goto标签创建批处理功能:Label。例:for /F "tokens=*" %%a in ('type %FileName%') do call :Foo %%agoto End:Fooset z=%1echo %z%echo %1goto :eof:End批处理功能是非常有用的机制。

慕雪6442864

我为此奋斗了很多小时。这是我注册命令行变量的循环。示例:Register.bat / param1:value1 / param2:value2它的作用是循环所有命令行参数,并使用正确的名称将变量设置为值。之后,您可以只使用set value =!param1 !!设置value2 =!param2!无论给定参数的顺序如何。(所谓的命名参数)。请注意!<> !,而不是%<>%。SETLOCAL ENABLEDELAYEDEXPANSIONFOR %%P IN (%*) DO (&nbsp; &nbsp; call :processParam %%P)goto:End:processParam [%1 - param]&nbsp; &nbsp; @echo "processparam : %1"&nbsp; &nbsp; FOR /F "tokens=1,2 delims=:" %%G IN ("%1") DO (&nbsp; &nbsp; &nbsp; &nbsp; @echo a,b %%G %%H&nbsp; &nbsp; &nbsp; &nbsp; set nameWithSlash=%%G&nbsp; &nbsp; &nbsp; &nbsp; set name=!nameWithSlash:~1!&nbsp; &nbsp; &nbsp; &nbsp; @echo n=!name!&nbsp; &nbsp; &nbsp; &nbsp; set value=%%H&nbsp; &nbsp; &nbsp; &nbsp; set !name!=!value!&nbsp; &nbsp; )&nbsp; &nbsp; goto :eof:End&nbsp; &nbsp;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP