本地文件夹重定向到映射的网络驱动器批处理文件

时间:2017-10-17 18:06:10

标签: batch-file redirect directory

我试图自动化我们在每个用户本地执行的用户配置,这就是我通过批处理文件执行此操作的原因。作为其中的一部分,我需要将他们的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%

1 个答案:

答案 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:\我的   文档\"