使用 doskey 在运行时评估环境变量
Evaluate environment variable at runtime with 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
变量,root
和 tools
宏可以是相同的,无论我在哪个项目根目录下。
不幸的是,这不起作用,因为似乎 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%
而不扩展变量。调用宏时变量将被扩展。
我正在创建一个简单的环境设置 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
变量,root
和 tools
宏可以是相同的,无论我在哪个项目根目录下。
不幸的是,这不起作用,因为似乎 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%
而不扩展变量。调用宏时变量将被扩展。