windows – 为什么批处理文件中的延迟扩展在这种情况下不起作用
这段代码
@echo off setlocal EnableDelayedExpansion set myvar=first set first=second echo myvar:!myvar! set myvar=!myvar! echo myvar:!myvar! 给 myvar:first myvar:first 在Windows Vista SP2上. 我预期的输出是 myvar:first myvar:second 为什么差异以及如何获得理想的效果? 解决方法
问题是设置myvar =!myvar!扩展设置myvar = first,
你用相同的内容设置它,然后你问echo myvar:!myvar!显示myvar的内容. 我会尝试添加更多解释,即使Aacini和shf301已经回答了这个问题. 两者都显示了!%var%的双重扩张!构造,Aacini解释了为什么它可以工作,以及为什么反转版本%!var!%无法工作. 恕我直言,有四种不同的扩展. 扩展百分比: setlocal set "myVar=simple content" ( endlocal set result=%myVar% ) FOR-Loop-Parameters扩展: setlocal EnableDelayedExpansion set "var=complex content &<>!" for /F "delims=" %%A in ("!var!") DO ( endlocal set "result=%%A" ) SET扩展: Aacini刚刚解释了如何调用%%% var %%%构造工作,我只想给出一些额外的评论. set "var=%%var%%#" call call call call call echo %var% 结果为%var%###### 但是电话有许多缺点/副作用! call call call call echo ^^ 结果^ 不过这是真的,但它主要是隐藏的,因为每次重启都有一个特殊的角色阶段,插入符号会逃脱下一个角色,但你可以看到加倍效果 call call call call echo "^^"^^ 结果“^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^”^ 即使调用扩展重新启动解析器,也不能在任何阶段使用延迟扩展(仅在第一个阶段). 如果检测到未转义的特殊字符,则呼叫将停止工作. echo you ^& me call echo you & me call echo you ^& me call echo you ^^& me call echo you ^^^& me 只有第一个产生输出你和&我,所有其他人都失败了. 另一个问题是调用极其缓慢,调用集var = content比set var = content慢50倍,原因是调用尝试启动外部程序. @echo off setlocal ( echo echo *** External batch,parameters are '%%*' ) > set.bat set "var=" call set var=hello set var 我希望它有点有趣…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – Bootrec / FIXBOOT vs Bootrec / FIXMBR
- haskell – GHCI在Windows上不那么懒惰?
- 如何在Windows cmd中启用ANSI转义码?
- Windows10安装ubuntu16.04双系统教程 Windows10
- 编译 – 在另一台Windows机器上运行Rust编译程序的要求是什
- windows – mstsc.exe的热键是什么?
- .net – 在Windows中添加全局键盘快捷键的最简单方法是什么
- 在Windows 7上使用libmysql.dll
- 如何将我的小型企业从Windows Server 2003计算机移动到Wind
- windows – 最佳实践:我是否应该始终为新员工安装新的操作
- Windows Server 2003域控制器替换
- windows – 业务文件夹结构的最佳实践是什么?
- windows-server-2008 – RDP中“使用其他帐户”的
- Windows的“安全删除硬件”对话框如何获得“前景
- 调试时的Windows Azure缓存 – 请求超时
- Windows – Powershell:捕获程序stdout和stderr
- windows-server-2008 – 如何追踪Windows Server
- windows-server-2008-r2 – 更改密码时为什么会出
- Windows 7中的SVN的Windows资源管理器列(详细视图
- 在Windows 7 Home Basic上找不到IIS