批处理文件 – Windows CMD批处理:具有DelayedExpansion的FOR /
发布时间:2020-12-14 04:25:22 所属栏目:Windows 来源:网络整理
导读:在我的桌面上,有一个名为“test”的文件夹.在这个文件夹里面有两个文件,“file1.txt”和“file2.txt”. 看看这个简单的批处理脚本: @ECHO OFFSET test="C:UsersTylerDesktoptest"ECHO %test%FOR /R %test% %%F IN (*) DO ( ECHO %%F) 正如您所料,它输出
在我的桌面上,有一个名为“test”的文件夹.在这个文件夹里面有两个文件,“file1.txt”和“file2.txt”.
看看这个简单的批处理脚本: @ECHO OFF SET test="C:UsersTylerDesktoptest" ECHO %test% FOR /R %test% %%F IN (*) DO ( ECHO %%F ) 正如您所料,它输出以下内容: "C:UsersTylerDesktoptest" C:UsersTylerDesktoptestfile1.txt C:UsersTylerDesktoptestfile2.txt 现在来看看这个变化: @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET test="C:UsersTylerDesktoptest" ECHO !test! FOR /R !test! %%F IN (*) DO ( ECHO %%F ) ENDLOCAL 我希望它的输出没有什么不同.但是,这里是: "C:UsersTylerDesktoptest" 好像!测试!在ECHO!测试中得到扩展!线,但不在FOR / R!测试中!线,变得公正!测试!因为那当然不是有效路径,FOR / R循环永远不会迭代. 为什么是这样?我错过了什么? 解决方法
为什么FOR工作与ECHO不同是因为批处理解析器(cmd.exe)具有FOR,IF和REM的特殊
parsing rules.
因此,延迟扩展对于此处的参数不起作用,仅适用于括号内的参数. 只有百分比扩展适用于参数,因为解析器在切换到特殊FOR解析器规则之前执行百分比扩展阶段. 如果你不能使用百分比扩展,因为你在一个块内,你可以将代码移动到一个自己的函数并调用它. @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET test="C:UsersTylerDesktoptest" ECHO !test! call :doMyLoop test exit /b :doMyLoop set "arg=!%1!" FOR /R %arg% %%F IN (*) DO ( ECHO %%F ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2008 – 为什么选择MPIO而不是802.3ad Team
- WPF启动画面,直到Windows结束加载
- 远程管理没有Active Directory的Windows计算机
- windows-server-2008-r2 – RemoteApp .rdp嵌入信用卡?
- windows – AutoHotkey将韩文键重新映射到Ctrl
- windows-server-2003 – 在个人证书上禁用强私钥加密
- 【Win10】使用 ValidationAttribute 实现数据验证
- windows-phone-7 – 列表是否有点击行为?
- winapi – 具有自定义对话框的IProgressDialog或有关如何执
- windows通信端口初始化失败怎么办?
推荐文章
站长推荐
热点阅读