批处理文件 – 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通信端口初始化失败怎么办?
推荐文章
            站长推荐
            
        热点阅读
            