采用以下目录结构:
C:
└─Test
├─a
│ ├─a.bat
├─b
│ └─b.lnk
└─c
a.bat
是一个批处理文件,仅包含 echo %cd%
,它打印当前工作目录。
b.lnk
是指向a.bat
的链接文件。它是通过按住 Alt 键将 a.bat
拖动到 b
目录并相应地重命名来创建的。
请按照以下步骤操作:
- 打开
cmd
。 - 执行
cd C:\Test\c
。 - 执行
C:\Test\a\a.bat
。- 这将打印
C:\Test\c
因为这是运行批处理文件的 cmd 实例的工作目录。当前工作目录将保留。这也适用于任何可执行文件,例如包含Console.WriteLine(Environment.WorkingDirectory);
的 C# 程序。
- 这将打印
- 执行
C:\Test\b\b.lnk
- 这将打印批处理文件指向的目录
C:\Test\a
,而不是像上面那样的C:\Test\c
。
- 这将打印批处理文件指向的目录
如何才能将 cmd 实例的工作目录转移到运行批处理文件(和其他程序)?
最佳答案
一种解决方案是打开链接文件的属性对话框并删除“执行于”文本框中的任何路径:
该值不仅在双击链接文件时适用,而且在从已有工作目录的现有进程运行时也适用。如果已设置,则优先。
此外,双击链接文件不会生成链接文件所在的目录C:\Test\b
。
我在写问题时发现了它,但由于我在谷歌上没有找到任何关于这个主题的内容,所以我还是提交了这个,希望其他人(以及我自己,当我最终忘记如何做时)可以找到它。
关于windows - 通过链接文件运行可执行文件时保留cmd工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910764/