无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 750|回复: 18
打印 上一主题 下一主题

[已解决] 获取的注册表中带%的路径cmd命令无法直接使用

[复制链接]
跳转到指定楼层
1#
发表于 3 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2012飘水 于 2025-8-11 15:04 编辑

@echo off
::获取Windows系统的临时文件夹,譬如:C:\Windows\temp(%SystemRoot%\TEMP)
set SystemPath_TEMP_System=""
for /f "tokens=2,*" %%i in ('%WINDIR%\System32\reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "TEMP"') do (
set SystemPath_TEMP_System=%%j
)
@echo Windows系统临时文件夹TEMP位置在:%SystemPath_TEMP_System%
::避免获取的路径有空格,用""双引号括起来
dir "%SystemPath_TEMP_System%"


::获取Windows系统中用户的临时文件夹,譬如:C:\Users\Administrator\AppData\Local\Temp(%USERPROFILE%\AppData\Local\Temp)
set SystemPath_TEMP_User=""
for /f "tokens=2,*" %%i in ('%WINDIR%\System32\reg query "HKEY_CURRENT_USER\Environment" /v "TEMP"') do (
set SystemPath_TEMP_User=%%j
)
@echo Windows系统用户临时文件夹TEMP位置在:%SystemPath_TEMP_User%
::避免获取的路径有空格,用""双引号括起来
dir "%SystemPath_TEMP_User%"

获取的注册表的临时文件夹路劲分别为:%SystemRoot%\TEMP           %USERPROFILE%\AppData\Local\Temp
但是用 dir命令显示的时候,出现错误提示:系统找不到指定的文件
由于有些非常有个性的用户,经常自行修改TEMP文件夹的路径,所以就为了解决通用方面的问题直接获取注册表信息保证通用性

请教高手们如何解决。非常感谢

2#
发表于 3 天前 | 只看该作者
试试,dir 命令中,两边再加个 %

点评

两边再加%,就不是个有效目录了,相当于没有这个路径  详情 回复 发表于 3 天前
回复

使用道具 举报

3#
 楼主| 发表于 3 天前 | 只看该作者
martin313 发表于 2025-8-11 10:49
试试,dir 命令中,两边再加个 %

两边再加%,就不是个有效目录了,相当于没有这个路径
回复

使用道具 举报

4#
发表于 3 天前 | 只看该作者
dir "%SystemRoot%\TEMP"
dir "%USERPROFILE%\AppData\Local\Temp"
回复

使用道具 举报

5#
发表于 3 天前 | 只看该作者
楼主,如果完成这个批量处理,是否可以分享出来,然后呢,由于没有下载附件权限,可以使用网络硬盘,分享出来,提前谢谢
回复

使用道具 举报

6#
发表于 3 天前 | 只看该作者
dir命令无法直接解析这些环境变量如%SystemRoot%和%USERPROFILE%)
修正后的脚本:
  1. @echo off
  2. :: 获取Windows系统的临时文件夹
  3. set SystemPath_TEMP_System=
  4. for /f "tokens=2,*" %%i in ('%WINDIR%\System32\reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "TEMP"') do (
  5.     set SystemPath_TEMP_System=%%j
  6. )

  7. :: 扩展环境变量
  8. call :ExpandEnv SystemPath_TEMP_System
  9. @echo Windows系统临时文件夹TEMP位置在:%SystemPath_TEMP_System%
  10. if exist "%SystemPath_TEMP_System%" (
  11.     dir "%SystemPath_TEMP_System%"
  12. ) else (
  13.     echo 目录不存在: %SystemPath_TEMP_System%
  14. )

  15. :: 获取Windows系统中用户的临时文件夹
  16. set SystemPath_TEMP_User=
  17. for /f "tokens=2,*" %%i in ('%WINDIR%\System32\reg query "HKEY_CURRENT_USER\Environment" /v "TEMP"') do (
  18.     set SystemPath_TEMP_User=%%j
  19. )

  20. :: 扩展环境变量
  21. call :ExpandEnv SystemPath_TEMP_User
  22. @echo Windows系统用户临时文件夹TEMP位置在:%SystemPath_TEMP_User%
  23. if exist "%SystemPath_TEMP_User%" (
  24.     dir "%SystemPath_TEMP_User%"
  25. ) else (
  26.     echo 目录不存在: %SystemPath_TEMP_User%
  27. )

  28. goto :eof

  29. :ExpandEnv
  30. setlocal EnableDelayedExpansion
  31. set var=%1
  32. set value=!%var%!
  33. :: 多次调用以确保嵌套变量被完全扩展
  34. :expandloop
  35. set expanded=!value!
  36. for /f "delims=" %%a in ('echo !expanded!') do set expanded=%%a
  37. if not "!expanded!"=="!value!" (
  38.     set value=!expanded!
  39.     goto expandloop
  40. )
  41. endlocal & set %1=%expanded%
  42. goto :eof
复制代码


如果仍然遇到问题,您也可以考虑使用以下更简单的方法直接获取临时目录:
  1. @echo off
  2. :: 直接使用系统环境变量
  3. echo 系统临时文件夹: %TEMP%
  4. if exist "%TEMP%" dir "%TEMP%"

  5. echo 用户临时文件夹: %TMP%
  6. if exist "%TMP%" dir "%TMP%"
复制代码

点评

后边这段代码,不能准确的获取临时文件夹 Microsoft Windows [版本 10.0.26100.3775] (c) Microsoft Corporation。保留所有权利。 E:\_MyToolBox\.装机必备>%temp% 'C:%users\ADMINI~1\AppData\Local\Temp'  详情 回复 发表于 3 天前
大佬的方法可以执行,但是其后的cmd批处理不执行了,只执行你这段代码后自动退出,后边的代码不执行了  详情 回复 发表于 3 天前
回复

使用道具 举报

7#
 楼主| 发表于 3 天前 | 只看该作者
zzx-lab 发表于 2025-8-11 11:26
dir命令无法直接解析这些环境变量如%SystemRoot%和%USERPROFILE%)
修正后的脚本:

大佬的方法可以执行,但是其后的cmd批处理不执行了,只执行你这段代码后自动退出,后边的代码不执行了
回复

使用道具 举报

8#
发表于 3 天前 来自手机 | 只看该作者
call set
回复

使用道具 举报

9#
 楼主| 发表于 3 天前 | 只看该作者
zzx-lab 发表于 2025-8-11 11:26
dir命令无法直接解析这些环境变量如%SystemRoot%和%USERPROFILE%)
修正后的脚本:

后边这段代码,不能准确的获取临时文件夹

Microsoft Windows [版本 10.0.26100.3775]
(c) Microsoft Corporation。保留所有权利。

E:\_MyToolBox\.装机必备>%temp%
'C:\Users\ADMINI~1\AppData\Local\Temp' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

E:\_MyToolBox\.装机必备>%tmp%
'C:\Users\ADMINI~1\AppData\Local\Temp' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

E:\_MyToolBox\.装机必备>%tmp%
'C:\Users\ADMINI~1\AppData\Local\Temp' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

E:\_MyToolBox\.装机必备>%temp%
'C:\Users\ADMINI~1\AppData\Local\Temp' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

E:\_MyToolBox\.装机必备>
回复

使用道具 举报

10#
发表于 3 天前 | 只看该作者
按楼上说的扩展一下变量好像就行了
  1. call set "SystemPath_TEMP_System=%SystemPath_TEMP_System%"
复制代码


点评

解决了就好  详情 回复 发表于 3 天前
不亏是大佬,这一句命令就解决了,非常非常非常感谢!祝您平安顺遂!  详情 回复 发表于 3 天前
回复

使用道具 举报

11#
 楼主| 发表于 3 天前 | 只看该作者
pole87898843 发表于 2025-8-11 11:53
按楼上说的扩展一下变量好像就行了

不亏是大佬,这一句命令就解决了,非常非常非常感谢!祝您平安顺遂!

点评

楼上提醒的 另外,我感觉应该加上 set "xxxx=%xxxx:"=%",文件夹路径如果有引号,把引号去掉了,否则可能重复引号  详情 回复 发表于 3 天前
回复

使用道具 举报

12#
发表于 3 天前 | 只看该作者
2012飘水 发表于 2025-8-11 12:08
不亏是大佬,这一句命令就解决了,非常非常非常感谢!祝您平安顺遂!

楼上提醒的
另外,我感觉应该加上
set "xxxx=%xxxx:"=%",文件夹路径如果有引号,把引号去掉了,否则可能重复引号

点评

好的,根据这个命令试试  详情 回复 发表于 3 天前
回复

使用道具 举报

13#
 楼主| 发表于 3 天前 | 只看该作者
pole87898843 发表于 2025-8-11 12:23
楼上提醒的
另外,我感觉应该加上
set "xxxx=%xxxx:"=%",文件夹路径如果有引号,把引号去掉了,否则可 ...

好的,根据这个命令试试
回复

使用道具 举报

14#
发表于 3 天前 | 只看该作者
pole87898843 发表于 2025-8-11 11:53
按楼上说的扩展一下变量好像就行了

解决了就好
回复

使用道具 举报

15#
 楼主| 发表于 3 天前 | 只看该作者
感谢:pole87898843 、szwp和 zzx-lab,其中pole87898843提到的

call set "SystemPath_TEMP_User=%SystemPath_TEMP_User%"

call set "SystemPath_TEMP_User=%SystemPath_TEMP_User:"=%"

非常有效果。非常感谢各位大佬的帮助
回复

使用道具 举报

16#
发表于 前天 06:52 | 只看该作者
谢谢10楼分享
回复

使用道具 举报

17#
发表于 前天 10:51 | 只看该作者
来学习学习
回复

使用道具 举报

18#
发表于 前天 13:57 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

19#
发表于 前天 16:27 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-8-14 21:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表