我试图自动化我们在每个用户本地执行的用户配置,这就是我通过批处理文件执行此操作的原因。作为其中的一部分,我需要将他们的Documents文件夹重定向到映射为U Drive的内容。如果我的U盘中存在My Documents文件夹,我需要它去那里,如果不是,我需要将它映射到U盘的根目录。
以下代码是我目前拥有的代码,但即使我有我要检查的文件夹,它也总是默认为Else条件。
如果有人可以提供帮助,请做。
@echo off
cd\ & cls
set UDRIVE="u:\My Documents\"
If exist %udrive% (set newDocuments=%udrive%) Else (set newDocuments=U:\)
set registryPath1="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
set registryPath2="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
>null reg add %registryPath1% /v "Personal" /t REG_SZ /d %newDocuments% /f
>null reg add %registryPath2% /v "Personal" /t REG_EXPAND_SZ /d %newDocuments% /f
>null reg add %registryPath2% /v "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" /t REG_EXPAND_SZ /d %newDocuments% /f
echo Redirection completed.
%echo%
Pause
%echo%
答案 0 :(得分:1)
不要为变量分配引号(请参阅this Squashman's comment):最佳做法是分配您的变量:set "varname=varvalue"
。这有助于保留特殊字符和空格,但不会为变量分配引号。然后,使用双引号明确地引用它们,如"%varname%"
以上规则应用于您的代码段,如下所示:
@echo off
cd\ & cls
set "UDRIVE=u:\My Documents\"
If exist "%udrive%" (set "newDocuments=%udrive%") Else (set "newDocuments=U:\")
set "registryPath1=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
set "registryPath2=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
>null reg add "%registryPath1%" /v "Personal" /t REG_SZ /d "%newDocuments%\" /f
>null reg add "%registryPath2%" /v "Personal" /t REG_EXPAND_SZ /d "%newDocuments%\" /f
>null reg add "%registryPath2%" /v "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" /t REG_EXPAND_SZ /d "%newDocuments%\" /f
echo Redirection completed.
请注意:反斜杠字符
REG
命令会将\
解释为该角色的转义符 紧随其后。要在数据中包含引号("
), 用转义字符作为前缀,例如这是\"
引用 这可能会导致引用目录路径出现问题,因为\"
at 该行的结尾将被转义。
保存目录路径 使用尾部反斜杠(\
)需要添加第二个反斜杠 '逃'逃避,例如而不是" C:\ My Docs \"使用" C:\我的 文档\"