batch-file - 使用 doskey 在运行时评估环境变量

标签 batch-file doskey

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

我目前有以下几点:

@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变量万一它发生了变化?

最佳答案

你不需要延迟扩展来让它工作

@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%在创建宏时不扩展变量。调用宏时变量将被扩展。

关于batch-file - 使用 doskey 在运行时评估环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39771663/

相关文章:

directory - 批处理文件 - 将文件列表写入变量

batch-file - 在 Windows 2008 服务器中运行 powershell 脚本时出现 Windows 任务计划程序问题

linux - 如果只能执行 Windows 批处理脚本,为什么 bash 脚本需要执行位?

windows - 用于打印出 sizeof 文件夹 cygwin 的 cmd 别名

batch-file - 为什么在 doskey 别名脚本中设置 %cd% 返回脚本路径而不是当前目录

windows - 使用别名运行循环

batch-file - 如何更改 .bat 文件中的根路径?

sql-server - 从Excel批量插入SQL Server

windows - 如何删除 doskey 宏?