首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用doskey在运行时评估环境变量

使用doskey在运行时评估环境变量
EN

Stack Overflow用户
提问于 2016-09-29 13:27:25
回答 1查看 1.6K关注 0票数 6

我正在创建一个简单的环境安装cmd脚本,并使用doskey设置各种别名和宏。我所处的环境有各种存储库,我想创建一些宏来快速导航流行目录。

我目前有以下情况:

代码语言:javascript
复制
@echo off
Setlocal EnableDelayedExpansion

set PROJECTS_PATH=%SystemDrive%\Projects

echo. Updating path...

REM Update PATH here 

echo. Setting up macros...

doskey np="%SystemRoot%\System32\notepad.exe" $*
doskey np+="%ProgramFiles(x86)%\Notepad++\notepad++.exe" $*
doskey ..=cd ..
doskey trunk=set PROJECT_ROOT=%PROJECTS_PATH%\Trunk ^& cd "!PROJECT_ROOT!"
doskey trunk2=set PROJECT_ROOT=%PROJECTS_PATH%\Trunk2 ^& cd "!PROJECT_ROOT!"
doskey root=cd "%PROJECT_ROOT%"
doskey tools=cd "%PROJECT_ROOT%\tools"

我希望能够使用trunk宏来设置PROJECT_ROOT变量,然后使用延迟扩展导航到这个新设置的变量。然后,如果我使用trunk2命令,它将再次重置PROJECT_ROOT变量并导航到该位置。最后,通过动态设置PROJECT_ROOT变量,无论我位于哪个项目根,roottools宏都可以是相同的。

不幸的是,这不起作用,因为在创建宏时,似乎会对PROJECT_ROOT进行评估。因此,运行宏trunk的结果是设置变量,然后执行cd ""

有没有办法让宏重新评估PROJECT_ROOT变量,以防它发生变化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-29 13:58:21

你不需要延迟扩张才能让它运转

代码语言:javascript
复制
@echo off
    setlocal enableextensions disabledelayedexpansion

    set "PROJECTS_PATH=%SystemDrive%\Projects"

    doskey trunk=cd /d "%PROJECTS_PATH%\trunk" $t set "PROJECT_ROOT=%%cd%%"
    doskey trunk2=cd /d "%PROJECTS_PATH%\trunk2" $t set "PROJECT_ROOT=%%cd%%"

    doskey root=cd /d "%%PROJECT_ROOT%%"
    doskey tools=cd /d "%%PROJECT_ROOT%%\tools"

不要设置变量并更改为目标文件夹,而是更改活动目录,然后设置变量。

在创建宏时,批处理文件中的%%var%%将被转换为%var%,而无需展开变量。变量将在调用宏时展开。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39771663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档