找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21976|回复: 12

[其他] 嵌套cmd输出变量不能

[复制链接]
发表于 2023-7-10 17:45:24 | 显示全部楼层 |阅读模式
我用bat写了一个嵌套cmd,正常cmd能够输出%systemroot%为c:\windows,但bat不行,如何使嵌套cmd识别是否是变量,并输出正常,同cmd一致
发表于 2023-7-14 19:11:01 | 显示全部楼层
回复 1# BingjianREMIX


    请把代码发出来看看
 楼主| 发表于 2023-7-14 19:14:49 | 显示全部楼层
回复 2# Batcher
  1. @echo off
  2. title MICRODOS
  3. color 07
  4. cd /d %~dp0

  5. :microdos
  6. cls
  7. echo MICRODOS [Version 23H2 24.0.23707.1946]
  8. echo ^(C^) REMIX LASER RISING STUDIO. All rights reserved.
  9. echo.

  10. :microdos2
  11. set "a=x"
  12. set /p a=%cd%^>
  13. set "a=x" & if /i "%a%" equ "x" (
  14.         goto :microdos2
  15. ) else %a%
  16. goto :microdos2
复制代码
可能跟变量拓展有关系吧
发表于 2023-7-14 21:45:21 | 显示全部楼层
理论上来讲,好像是因为变量扩展的原因,处理时只能扩展一次,而在处理%a%时已经进行过一次扩展,所以……
最近看了变量嵌套介绍的帖子,这里刚好有变量扩展相关的教程,我觉得可以参考来一下:
批处理脚本高级编程技巧——变量嵌套
三、只有了解变量扩展的优先级,才可能理解变量嵌套的用法。  
    变量嵌套扩展的方式有:……
netbenton 发表于 2009-11-28 19:01
 楼主| 发表于 2023-7-14 21:50:45 | 显示全部楼层
回复 4# dimo


    我最近正好在研究大佬的帖子http://www.bathome.net/thread-2899-1-1.html
 楼主| 发表于 2023-7-14 21:54:14 | 显示全部楼层
之后在代码里加了变量延迟拓展,还是没有用,变量延迟拓展跟它...
发表于 2023-7-14 21:57:43 | 显示全部楼层
回复 6# BingjianREMIX


    我是简单试了一下,,用call %a%之后就显示了正确结果
 楼主| 发表于 2023-7-14 22:01:26 | 显示全部楼层
回复 7# dimo


    哦?哪里加的call正常了
发表于 2023-7-14 22:13:56 | 显示全部楼层
回复 8# BingjianREMIX


    直接在else后面加
  1. set "a=x" & if /i "%a%" equ "x" (
  2.         goto :microdos2
  3. ) else call %a%
复制代码
正常来说哪个语句需要call,还得加个判断之类的,避免其他命令出错.
发表于 2023-7-14 22:22:31 | 显示全部楼层
回复 3# BingjianREMIX
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :microdos2
  4. set "a=x"
  5. set /p a=^>
  6. if /i "%a%" equ "x" (
  7.     goto :microdos2
  8. ) else (
  9.     call echo,!a!
  10. )
  11. goto :microdos2
复制代码
 楼主| 发表于 2023-7-14 23:19:07 | 显示全部楼层
回复 10# Batcher


    那其它命令怎么兼容
发表于 2023-7-15 10:07:25 | 显示全部楼层
  1. @echo off
  2. :microdos2
  3. set /p a=%cd%^>
  4. if defined a (
  5.         call echo %a%
  6. )
  7. set "a="
  8. goto :microdos2
复制代码
发表于 2023-7-15 19:23:20 | 显示全部楼层
回复 11# BingjianREMIX


    那就多读几遍5楼链接
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:24 , Processed in 0.019514 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表