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

Batch file 本地文件夹重定向到映射的网络驱动器批处理文件,batch-file,redirect,directory,Batch File,Redirect,Directory,我试图自动化我们的用户配置,这是我们每个用户在本地进行的配置,这就是为什么我要通过批处理文件进行配置。作为其中的一部分,我需要将他们的Documents文件夹重定向到映射为U盘的位置。如果“我的文档”文件夹存在于他们的U盘中,我需要它转到那里,如果没有,我需要它映射到他们U盘的根目录 下面的代码是我当前拥有的,但它始终默认为Else条件,即使我拥有要检查的文件夹 如果有人能帮忙,请帮忙 @echo off cd\ & cls set UDRIVE="u:\My Documents\"

我试图自动化我们的用户配置,这是我们每个用户在本地进行的配置,这就是为什么我要通过批处理文件进行配置。作为其中的一部分,我需要将他们的Documents文件夹重定向到映射为U盘的位置。如果“我的文档”文件夹存在于他们的U盘中,我需要它转到那里,如果没有,我需要它映射到他们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%

不要给变量分配引号请参见:最佳做法是这样分配变量: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 这条线的尽头将被逃脱。保存目录路径的步骤 带有尾随反斜杠\需要在后面添加第二个反斜杠 “escape”是转义,例如,不要使用C:\My Docs\而使用C:\My Docs 文档\


如果存在,请使用%udrive%\GOTO:FolderRedirect,否则GOTO:FolderRedirect 2。读如果/?对于基本解释,它仍然默认为Else条件。无论目标文件夹是否存在,它仍默认为Else条件。请在:FolderRedirect2标签之前插入goto:。谢谢你的帮助。我让它现在能够识别这两个参数,但当它试图写入注册表时,脚本会暂停,并且什么也不做。我编辑了我的原始帖子以反映我的新代码。默认为Else参数时运行正常,但运行另一个参数时会暂停。好吧,我就在这里,但当它尝试将其重定向到U:\My Documents\n时,它仍然挂起。我想知道在添加密钥之前是否需要删除密钥??老实说,我完全没有想法了。如果我把空间从乌得里夫的道路上移开,其他一切都一样。如何使其与空格一起工作?请参阅更新的答案注释:反斜杠字符。检查注册表查询HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹以及用户Shell文件夹。谢谢。真的使我免于严重的头痛。