无忧启动论坛

标题: 获取的注册表中带%的路径cmd命令无法直接使用 [打印本页]

作者: 2012飘水    时间: 4 天前
标题: 获取的注册表中带%的路径cmd命令无法直接使用
本帖最后由 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文件夹的路径,所以就为了解决通用方面的问题直接获取注册表信息保证通用性

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


作者: martin313    时间: 4 天前
试试,dir 命令中,两边再加个 %
作者: 2012飘水    时间: 4 天前
martin313 发表于 2025-8-11 10:49
试试,dir 命令中,两边再加个 %

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

作者: magicgenius    时间: 4 天前
dir "%SystemRoot%\TEMP"
dir "%USERPROFILE%\AppData\Local\Temp"
作者: 地球守护者    时间: 4 天前
楼主,如果完成这个批量处理,是否可以分享出来,然后呢,由于没有下载附件权限,可以使用网络硬盘,分享出来,提前谢谢
作者: zzx-lab    时间: 4 天前
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%"
复制代码

作者: 2012飘水    时间: 4 天前
zzx-lab 发表于 2025-8-11 11:26
dir命令无法直接解析这些环境变量如%SystemRoot%和%USERPROFILE%)
修正后的脚本:

大佬的方法可以执行,但是其后的cmd批处理不执行了,只执行你这段代码后自动退出,后边的代码不执行了
作者: szwp    时间: 4 天前
call set
作者: 2012飘水    时间: 4 天前
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\.装机必备>
作者: pole87898843    时间: 4 天前
按楼上说的扩展一下变量好像就行了
  1. call set "SystemPath_TEMP_System=%SystemPath_TEMP_System%"
复制代码



作者: 2012飘水    时间: 4 天前
pole87898843 发表于 2025-8-11 11:53
按楼上说的扩展一下变量好像就行了

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

楼上提醒的
另外,我感觉应该加上
set "xxxx=%xxxx:"=%",文件夹路径如果有引号,把引号去掉了,否则可能重复引号
作者: 2012飘水    时间: 4 天前
pole87898843 发表于 2025-8-11 12:23
楼上提醒的
另外,我感觉应该加上
set "xxxx=%xxxx:"=%",文件夹路径如果有引号,把引号去掉了,否则可 ...

好的,根据这个命令试试
作者: guong    时间: 4 天前
pole87898843 发表于 2025-8-11 11:53
按楼上说的扩展一下变量好像就行了

解决了就好
作者: 2012飘水    时间: 4 天前
感谢:pole87898843 、szwp和 zzx-lab,其中pole87898843提到的

call set "SystemPath_TEMP_User=%SystemPath_TEMP_User%"

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

非常有效果。非常感谢各位大佬的帮助
作者: wang1126    时间: 3 天前
谢谢10楼分享
作者: guong    时间: 3 天前
来学习学习
作者: fegr    时间: 3 天前
感谢分享
作者: 妖之乡    时间: 3 天前
谢谢楼主分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3