我正在尝试创建一个批处理文件,每次我在Windows中使用一些好的别名打开cmd提示符时都会运行该文件。有时当我工作时,我必须继续引用一个特定的目录,然后四处走动并回到它;到目前为止这么好但我无法弄清楚这个问题我得到了一个变量。
::initialize variable to root
set cwd=C:\
::save current directory
doskey setcwd=set cwd=%CD%
::jump back to saved directory
doskey gocwd=cd %cwd%
::print the variable
doskey pcwd=echo %cwd%
以下是我尝试使用这些命令时发生的事情:
(opening up cmd.exe, it starts in C:\Users\<my user name>, batch file executes)
> pwd
C:\
> cd foo\bar\baz
foo\bar\baz
> pwd
foo\bar\baz
> pcwd
C:\ <-- expected, havent set it yet
> echo %cwd% <-- checking it manually just to make sure it says 'C:\'
(no output) <-- strange, I thought I set it to C:\
> setcwd
> pcwd
C:\ <-- what? I thought I set it to the current directory
> echo %cwd% <-- checking again to make sure
C:\Users\<my user name> <-- what- I don't even...
> gocwd
> pwd
C:\ <-- how...
这基本上是我所面临的问题;看起来我有两个不同的cwd
变量实例;我的批处理文件中的那个,以及我手动打印的那个?
*注意我确实在我的文件顶部包含setlocal EnableDelayedExpansion
,理解我在doskeys定义中使用的变量不会被扩展,直到我执行命令,而不是在当时读取文件;仍然没有帮助。
答案 0 :(得分:0)
您需要向我们提供整批产品。如果该批次中有setlocal
命令,则批次终止时将撤消对环境的任何变更。
::initialize variable to root
cwd=C:\
不正确。你需要
::initialize variable to root
SET cwd=C:\
使用隐身setlocal
,cwd
将保持&#34;为空&#34;
答案 1 :(得分:0)
::initialize variable to root
set "cwd=C:\."
::save current directory
doskey setcwd=set "cwd=%%CD%%"
::jump back to saved directory
doskey gocwd=if defined cwd (cd /d "%%cwd%%") else echo NO CWD
::print the variable
doskey pcwd=if defined cwd (echo %%cwd%%) else echo NO CWD
如果在定义宏时没有转义变量,则宏中不会引用变量,因为解析器会在解析时用变量替换变量。