为什么 %TEMP% 解析为形式为 %TEMP\<数字> 的非确定性路径?

17

我有一台Windows Server 2008的32位系统,当我输入%temp%时,它会带我到..AppData\Local\Temp\1\或..AppData\Local\Temp\2,而不是..AppData\Local\Temp。

我已经检查了环境变量,它们没问题。

我的问题是因为我有一个应用程序,应该将文件复制到%temp%\my application,但它却将文件复制到%temp%\1\my application。

请问有没有解决方法?

2个回答

24
解释、讨论、解决方法等都在Old New Thing文章 为什么我的TEMP目录名称会不断更改 中 - 这确保了同一用户的多个终端服务会话(默认情况下)不共享一个临时目录。

问题出在管理模板\Windows组件\终端服务\临时文件夹策略组上。如果你没有选择不使用每个会话的临时文件夹,那么就会创建这些TEMP子目录。还有一篇知识库文章描述了这些策略组背后的注册表键。

个人认为回复中的第一个评论最有用:

反正临时位置跳来跳去也没关系吧,它是用来临时存储的!

另请参阅


谢谢,我现在明白了... 我已经将目标文件夹更改为%temp%文件夹。 - shacharsa
2
为什么改变很重要呢?因为有时候两个程序必须通过 TEMP 目录中的文件会合。无法预测值会使这更加困难。 - e40
2
如果这两个程序运行在同一个会话中,它们将观察到相同的值。如果这两个程序运行在不同的会话中,那么它们之间的任何交互可能是一个错误。 - Damien_The_Unbeliever
8
我遇到了一个情况,我最终得到了一个名为/2的临时文件夹,但一些原因导致Windows没有创建该文件夹。因此,很多东西开始出现问题。一些应用程序例如“Process Explorer”无法运行,因为它需要从临时文件夹中提取和运行。 - Rick Strahl
这是一个很奇怪的问题,尝试在谷歌上搜索它让我感到很高兴,因为我找到了答案。 - codaamok

0

环境变量有4个上下文:

(按Win+R,然后键入regedit以查找以下路径)

  1. 系统变量 (HKLM\System\CurrentControlSet\Control\Session Manager\Environment)
  2. 用户变量 (HKCU\Environment)
  3. 进程变量 (不存储在注册表中)
  4. 易失性变量 (HKCU\VolatileEnvironment)

参考: https://rakhesh.com/windows/temp-environment-variable-has-a-2-or-other-number-after-it/

当组策略 不使用每个会话的临时文件夹 未配置或未设置为启用时,系统将生成两个易失性环境变量 TEMPTMP,其值与当前用户的 TEMP 变量相同,并在 TEMP 文件夹末尾添加递增数字(每次用户登录时递增,请查看 @Damien 的答案获取详细信息)。

如果您将组策略 不使用临时文件夹 设置为启用,则不会发生此行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接