批处理文件中通过reg query获取OneDrive for Business文档路径异常求助
解决OneDrive for Business默认文档路径批处理获取不全的问题
问题描述
直接在命令提示符执行:
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal
能得到完整路径:C:\Users\*username*\OneDrive - *companyName*\Documents,但使用以下批处理代码时,只能得到C:\Users\*username*\OneDrive:
for /f "tokens=3" %%i in ('reg.exe query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Personal"')do (set ValueValue=%%i) @echo Value Value = %ValueValue%
问题原因
reg query的输出中,目标路径包含空格,tokens=3仅提取了空格分隔的第三个字段,后续的- companyName\Documents被当作独立字段未被捕获,导致路径被截断。
修正方法
方法一:用tokens=3*捕获剩余所有内容
修改for循环的tokens参数,3*表示将第三个字段赋值给%%i,剩余的所有内容(包括空格)赋值给%%j,再将两者拼接得到完整路径:
@echo off for /f "tokens=3*" %%i in ('reg.exe query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Personal"')do ( set "ValueValue=%%i %%j" ) @echo Value Value = %ValueValue%
方法二:取消分隔符捕获整行,再提取路径
通过delims=取消空格分隔规则,捕获整行内容后,用字符串替换去掉路径前的无关部分:
@echo off setlocal enabledelayedexpansion for /f "delims=" %%a in ('reg.exe query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Personal"')do ( set "line=%%a" set "ValueValue=!line:*Personal =!" ) @echo Value Value = %ValueValue% endlocal
注:需要启用延迟变量扩展(
setlocal enabledelayedexpansion),因为循环内修改并读取变量依赖该特性。
内容的提问来源于stack exchange,提问作者fureelmusic
相关产品推荐
相关产品推荐

