无忧启动论坛

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

[求助] 关于"我的文档"路径问题[已解决]

[复制链接]
跳转到指定楼层
1#
发表于 2020-9-3 20:02:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 楼,我把之前的描述中的关键词加粗并更改为红色,并附上图文说明吧
2#
发表于 2020-9-3 20:48:13 | 只看该作者
本帖最后由 都市浪子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"


点评

添加了 setlocal enabledelayedexpansion 语句后, 执行结果并没有变化  详情 回复 发表于 2020-9-3 20:59
回复

使用道具 举报

3#
 楼主| 发表于 2020-9-3 20:59:07 | 只看该作者
都市浪子666 发表于 2020-9-3 20:48
要开启延迟变量   
@echo off

添加了 setlocal enabledelayedexpansion 语句后, 执行结果并没有变化

点评

我这执行正常 [attachimg]464467[/attachimg]  详情 回复 发表于 2020-9-3 22:06
回复

使用道具 举报

4#
发表于 2020-9-3 22:01:02 | 只看该作者
@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"

回复

使用道具 举报

5#
发表于 2020-9-3 22:06:41 | 只看该作者
Bluebells 发表于 2020-9-3 20:59
添加了 setlocal enabledelayedexpansion 语句后, 执行结果并没有变化

我这执行正常

回复

使用道具 举报

6#
发表于 2020-9-3 22:12:58 | 只看该作者
用用户环境变量啊
回复

使用道具 举报

7#
发表于 2020-9-4 06:58:59 | 只看该作者
本帖最后由 窄口牛 于 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
复制代码
清理远程桌面记录。修改用户目录,可能会导致注册表里这两个路径不一致。
回复

使用道具 举报

8#
发表于 2020-9-4 08:31:29 | 只看该作者
本帖最后由 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
复制代码


点评

正解,感谢指教!  详情 回复 发表于 2020-9-4 14:50

评分

参与人数 1无忧币 +5 收起 理由
Bluebells + 5 赞一个!

查看全部评分

回复

使用道具 举报

9#
发表于 2020-9-4 14:03:07 | 只看该作者
@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

点评

没测试就发上来?  详情 回复 发表于 2020-9-10 21:37
回复

使用道具 举报

10#
 楼主| 发表于 2020-9-4 14:50:21 | 只看该作者
dos时代菜鸟 发表于 2020-9-4 08:31
这样就可以了,
就是再用一次 for 转换下。

正解,感谢指教!
回复

使用道具 举报

11#
发表于 2020-9-10 21:37:09 | 只看该作者
magicgenius 发表于 2020-9-4 14:03
@echo off
for /f "skip=2 tokens=2* delims= " %%i in ('reg query "HKCU\Software\Microsoft\Windows\Cu ...

没测试就发上来?

点评

你没测试就瞎回复?我当然是测试过了!!!  详情 回复 发表于 2020-9-11 06:31
回复

使用道具 举报

12#
发表于 2020-9-11 06:31:25 | 只看该作者

你没测试就瞎回复?我当然是测试过了!!!

点评

试过好像出错 [attachimg]464962[/attachimg]  详情 回复 发表于 2020-9-12 17:11
回复

使用道具 举报

13#
发表于 2020-9-12 17:11:53 | 只看该作者
magicgenius 发表于 2020-9-11 06:31
你没测试就瞎回复?我当然是测试过了!!!


试过好像出错


点评

你真是不懂批处理啊!这能直接放在CMD中运行吗?得在批处理文件中!要不得去掉一个%.[attachimg]464968[/attachimg]  详情 回复 发表于 2020-9-12 20:38
回复

使用道具 举报

14#
发表于 2020-9-12 19:23:46 | 只看该作者
  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
复制代码


点评

查询的注册表项根本不是同一个,你那个默认是使用绝对路径而不是存在变量的相对路径  详情 回复 发表于 2020-9-12 20:09
回复

使用道具 举报

15#
 楼主| 发表于 2020-9-12 20:09:21 | 只看该作者

查询的注册表项根本不是同一个,你那个默认是使用绝对路径而不是存在变量的相对路径
回复

使用道具 举报

16#
发表于 2020-9-12 20:38:11 | 只看该作者

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

点评

哈哈!是不懂这些东西,平时只是拿那些大神分享的,没想到批处理和CMD是不一样。  详情 回复 发表于 2020-9-14 18:54
回复

使用道具 举报

17#
发表于 2020-9-14 18:54:42 | 只看该作者
magicgenius 发表于 2020-9-12 20:38
你真是不懂批处理啊!这能直接放在CMD中运行吗?得在批处理文件中!要不得去掉一个%.

哈哈!是不懂这些东西,平时只是拿那些大神分享的,没想到批处理和CMD是不一样。
回复

使用道具 举报

18#
发表于 2020-9-22 15:02:41 | 只看该作者
收藏,有点启发意义!
回复

使用道具 举报

19#
发表于 2020-10-12 15:50:18 | 只看该作者
本帖最后由 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"
复制代码



回复

使用道具 举报

20#
发表于 2020-10-18 15:24:23 | 只看该作者
  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
复制代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-5 01:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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