因为是一次性分析的,所以前面的set OUTPUT=语句的结果并没有作用到后一条输出语句,前面set语句是执行后OUTPUT才有希望的值,这就是分行和执行的差异。 解决办法是使用延迟扩展(EnableDelayedExpansion),让后一条的echo语句延迟扩展,指定前面的set语句执行完成;语法是: 定义setlocal EnableDelayedExpansion 使用!var!代替%...
setlocal命令没啥用, 就是设定一个本地生效(就是本Batch文件生效)的变量效果. enabledelayedexpansion字面上翻译一下: 启用延迟展开. 怎么理解呢? 回到我们的parse time和execution time. 正常来说,parse time的时候变量就已经被简单替换为了值, 但是这不是我们想要的效果, 怎么办? 那就想办法让这个效果延迟好了?
我们这次把上面的两个例子加上setlocal enabledelayedexpansion再试试看: 首先是if的情况 @echo off setlocal enabledelayedexpansion set foo="helloworld" if %foo%=="helloworld" ( set foo="helloubuntu" echo !foo! ) for的那个例子: @echo off setlocal enabledelayedexpansion for /L %%i in (1,1,10) ...
1. setlocal enabledelayedexpansion --延迟环境变量扩展。 2.延迟变量扩展中,要使用!来引用变量。 @echo off setlocal enabledelayedexpansion FOR /F "delims=~" %%a IN ('findstr "1" fileName') DO (^ set str=%%a echo !str:s1=s2! ) for %%a in (debugRecorder*) do ( echo %%a ) @echo off...
SETLOCAL ENABLEDELAYEDEXPANSION #启用"延缓环境变量扩充" SETLOCAL DISABLEDELAYEDEXPANSION #停用"延缓环境变量扩充" ENDLOCAL #恢复到使用SETLOCAL语句以前的状态 “命令扩展名”默认为启用 “延缓环境变量扩充”默认为停用 批处理结束系统会自动恢复默认值 可以修改注册表以禁用"命令扩展名",详见 cmd /? 。所以用到"...
分析一下例2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量a赋值为4,“set a=5&echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
batch file用于在文件前添加随机数字(3位数字)并删除数字我对两个batch file感兴趣:一个生成随机数字(3位数字),并把它们放在一个文件夹中的每个MP3文件的前面,另一批次用于删除这些随机数字。 我在第一批的尝试: @echo off setlocal EnableDelayedExpansion for %%i in (*.mp3) do ( ren "%%i" "!RANDOM...
SETLOCAL ENABLEDELAYEDEXPANSION#启用"延缓环境变量扩充" SETLOCAL DISABLEDELAYEDEXPANSION#停用"延缓环境变量扩充" ENDLOCAL#恢复到使用SETLOCAL语句以前的状态 “命令扩展名”默认为启用 “延缓环境变量扩充”默认为停用 批处理结束系统会自动恢复默认值 可以修改注册表以禁用"命令扩展名",详见 cmd /? 。所以用到"命令扩...
用单引号将括号之间的 file-set 括起来。这样,该字符 串会被当作一个文件中的一个单一输入行进行解析。 最后,可以用 FOR /F 命令来分析命令的输出。方法是,将 括号之间的 file-set 变成一个反括字符串。该字符串会 被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到 ...
变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来 由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了 另外,启动变量延迟,“%”的变量还是不变 ...