无忧启动论坛

标题: 关于"我的文档"路径问题[已解决] [打印本页]

作者: Bluebells    时间: 2020-9-3 20:02
标题: 关于"我的文档"路径问题[已解决]
本帖最后由 Bluebells 于 2020-9-12 20:08 编辑

例如我要删除"我的文档"路径下的 Test 文件夹, 使用如下批处理代码:
  1. @echo off
  2. for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do set Personal=%%j
  3. rd /s/q "%Personal%\Test"
复制代码
虽然成功获取到"我的文档"的路径, 但由于获取到的路径里存在变量, 其中的变量会作为字符串解释而不是变量, 请问该如何解决?

正解在 8 楼

为什么正解在 8 楼,我把之前的描述中的关键词加粗并更改为红色,并附上图文说明吧

作者: 都市浪子666    时间: 2020-9-3 20:48
本帖最后由 都市浪子666 于 2020-9-3 20:49 编辑
  1. <span style="background-color: rgb(255, 255, 255);">
  2. </span>
复制代码
要开启延迟变量   
@echo off

setlocal enabledelayedexpansion
for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do set Personal=%%j
rd /s/q "%Personal%\Test"



作者: Bluebells    时间: 2020-9-3 20:59
都市浪子666 发表于 2020-9-3 20:48
要开启延迟变量   
@echo off

添加了 setlocal enabledelayedexpansion 语句后, 执行结果并没有变化
作者: 2010feicool    时间: 2020-9-3 22:01
@echo off
set "str=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
for /f "tokens=2*" %%a in ('reg query "%str%" /v Personal 2^>nul') do set "a=%%b"

rd /s/q "%a%\Test"


作者: 都市浪子666    时间: 2020-9-3 22:06
Bluebells 发表于 2020-9-3 20:59
添加了 setlocal enabledelayedexpansion 语句后, 执行结果并没有变化

我这执行正常


作者: 黑中见白    时间: 2020-9-3 22:12
用用户环境变量啊
作者: 窄口牛    时间: 2020-9-4 06:58
本帖最后由 窄口牛 于 2020-9-4 07:07 编辑
  1. @echo off
  2. SET SF="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  3. FOR /F "tokens=2,*" %%I IN ('REG QUERY %SF% /v Personal 2^>NUL^|FIND /I "Personal"') DO SET "myDoc=%%~J"
  4. SET SF="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
  5. FOR /F "tokens=2,*" %%I IN ('REG QUERY %SF% /v Personal 2^>NUL^|FIND /I "Personal"') DO SET "pth=%%~J"
  6. del /q /a:h "%myDoc%\Default.rdp"
  7. del /q /a:h "%pth%\Default.rdp"
  8. reg delete "HKCU\Software\Microsoft\Terminal Server Client\Default" /f
  9. reg delete "HKCU\Software\Microsoft\Terminal Server Client\LocalDevices" /f
  10. reg delete "HKCU\Software\Microsoft\Terminal Server Client\Servers" /f
复制代码
清理远程桌面记录。修改用户目录,可能会导致注册表里这两个路径不一致。

作者: dos时代菜鸟    时间: 2020-9-4 08:31
本帖最后由 dos时代菜鸟 于 2020-9-4 08:35 编辑


这样就可以了,
就是再用一次 for 转换下。

具体自己研究。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do (
  4.           for /f "delims=" %%c in ('echo %%j') do echo %%c
  5. )
  6. pause
复制代码



作者: magicgenius    时间: 2020-9-4 14:03
@echo off
for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do set Personal=%%j
cd /d "%Personal%"
rd /q /s test

作者: Bluebells    时间: 2020-9-4 14:50
dos时代菜鸟 发表于 2020-9-4 08:31
这样就可以了,
就是再用一次 for 转换下。

正解,感谢指教!
作者: 极度凶残    时间: 2020-9-10 21:37
magicgenius 发表于 2020-9-4 14:03
@echo off
for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\Cu ...

没测试就发上来?
作者: magicgenius    时间: 2020-9-11 06:31
极度凶残 发表于 2020-9-10 21:37
没测试就发上来?

你没测试就瞎回复?我当然是测试过了!!!
作者: 极度凶残    时间: 2020-9-12 17:11
magicgenius 发表于 2020-9-11 06:31
你没测试就瞎回复?我当然是测试过了!!!


试过好像出错



作者: 807979023    时间: 2020-9-12 19:23
  1. @echo off&color 1f
  2. for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do set Personal=%%j
  3. cd /d "%Personal%"
  4. dir
  5. pause
复制代码



作者: Bluebells    时间: 2020-9-12 20:09
807979023 发表于 2020-9-12 19:23

查询的注册表项根本不是同一个,你那个默认是使用绝对路径而不是存在变量的相对路径
作者: magicgenius    时间: 2020-9-12 20:38
极度凶残 发表于 2020-9-12 17:11
试过好像出错

你真是不懂批处理啊!这能直接放在CMD中运行吗?得在批处理文件中!要不得去掉一个%.

作者: 极度凶残    时间: 2020-9-14 18:54
magicgenius 发表于 2020-9-12 20:38
你真是不懂批处理啊!这能直接放在CMD中运行吗?得在批处理文件中!要不得去掉一个%.

哈哈!是不懂这些东西,平时只是拿那些大神分享的,没想到批处理和CMD是不一样。
作者: sairen139    时间: 2020-9-22 15:02
收藏,有点启发意义!
作者: quya    时间: 2020-10-12 15:50
本帖最后由 quya 于 2020-10-12 15:52 编辑

我也来贡献一下, 其实呢,不用再用一次for , 只需要call就可以了

例如 echo “有变量” 和 call  echo “有变量” 在没有变量的时候是一样的, 但有变量的时候后者会先把变量转换的。

所以也可以这么写

  1. @echo off
  2. for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do call set Personal=%%j
  3. rd /s/q "%Personal%\Test"
复制代码




作者: pznpt    时间: 2020-10-18 15:24
  1. @echo off
  2. for /f "skip=2 tokens=2*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal') do call echo,%%j
  3. pause
复制代码





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