使用批处理文件将 Windows 用户文件夹(3D 对象、桌面、下载、文档、收藏夹、图片和视频)更改为 OneDrive 文件夹

使用批处理文件将 Windows 用户文件夹(3D 对象、桌面、下载、文档、收藏夹、图片和视频)更改为 OneDrive 文件夹

我找到了一种手动的方法来做到这一点,如果你转到默认用户文件夹(3D 对象、桌面、下载、文档、收藏夹、图片和视频),右键单击,然后单击属性,然后单击位置,然后可以添加 OneDrive 文件夹位置,然后更改 Windows 设置的路径。

我想要做的是获取一个批处理文件,将用户文件夹逐个更改为 OneDrive 中的预制文件夹,这还将自动将用户文件和文件夹复制到新目的地。

由于这个过程似乎一次只能运行一个文件夹,所以可能需要多个批处理文件才能工作,我对此没意见。

因此,为了澄清这一点,我正在寻找以下步骤:

  1. 将用户默认用户文件夹位置更改为 OneDrive 中的预定义文件夹。以下是此更改的具体路径:
%USERPROFILE%\3D Objects> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\3D Objects

%USERPROFILE%\Contacts"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Contacts

%USERPROFILE%\Desktop"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Desktop

%USERPROFILE%\Documents"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Documents

%USERPROFILE%\Downloads > %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Downloads

%USERPROFILE%\Favorites" > %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Favorites

%USERPROFILE%\Links"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Links

%USERPROFILE%\Music"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Music

%USERPROFILE%\Pictures"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Pictures

%USERPROFILE%\Videos"> %USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\Videos
  1. 如果手动完成,系统会提示您是否要将文件和文件夹移动到新目标,我希望系统自动回答“是”,并将文件移动到新的 OneDrive 位置。如果由于文件移动而难以执行此过程,可以将其分成不同的批处理文件。

  2. 如果运行此批处理文件并且整个设置已经完成,它将检查默认的 OneDrive 用户文件夹位置,如果用户已经将用户文件夹设置为 OneDrive 中的文件夹,则会显示一条消息通知他们。

  3. 如果任何文件或文件夹移动未成功复制,则文件和/或文件夹及其路径的日志将显示在日志文件中,并将生成并保存在%USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\

  4. 如果该过程成功,则整个过程结束时在 CMD 中将显示成功消息。

答案1

我和@SSAdamT 合作,这是我们想出的解决方案。如果有更简单的方法可以实现相同的目标,请告诉我们。

@ECHO OFF
set list=Desktop Documents Downloads Favorites Music Pictures Videos
set baseLocation="%USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\"
set "Key=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
set "Typ=REG_EXPAND_SZ"
set RegList="Desktop" "Personal" "{374DE290-123F-4565-9164-39C4925E467B}" "Favorites" "My Music" "My Pictures" "My Video"
set /a c=0
setLocal enableDelayedExpansion
for %%j in (%RegList%) do (
    set RegList[!c!]=%%j & set /a c=c+1
)
for %%i in (%list%) do (
    if not exist %baseLocation%%%i (
        mkdir %baseLocation%%%i
    ) else (
        echo %%i already exsists
    )
)
set baseLocation=%baseLocation:"=%
for %%i in (%list%) do (
    RoboCopy.exe "%USERPROFILE%\%%~i\." "%baseLocation%\%%~i\." *.* /MOV /FP /NP /IS /Z /E /NFL /NDL /NJH
)
set /a d=0
for %%k in (%list%) do (
    call set val=%%RegList[!d!]%% & Reg Add "%Key%" /f /V !val! /T %Typ% /D "%baseLocation%%%k" & set /a d=d+1
)  
echo DONE!
pause

希望这对那些需要自动移动用户文件夹的人有所帮助。只需将“baseLocation”变量更改为您想要文件夹的位置即可。

编辑:忘记感谢@It_Wasn't_Me 提供的 RoboCopy 命令。

答案2

您可以尝试使用一个简单的for循环RoboCopy

  • 在命令行中
for %i in ("3D Objects",Contacts,Desktop,Documents,Favorites,Links,Music)do RoboCopy.exe "%USERPROFILE%\%~i\." "%OneDrive%\%~i\." *.* /MOV /FP /NP /IS /Z /E /L
  • 在 bat/cmd 文件中:
@echo off  

for %%i in ("3D Objects",Contacts,Desktop,Documents,Favorites,Links,Music)do RoboCopy.exe "%USERPROFILE%\%%~i\." "%OneDrive%\%%~i\." *.* /MOV /FP /NP /IS /Z /E /L

观察:1指某东西的用途/L用于预览执行RoboCopy,才能有效执行复制,删除/L

在此处输入图片描述

  • 在命令行中
for %i in ("3D Objects",Contacts,Desktop,Documents,Favorites,Links,Music)do RoboCopy.exe "%USERPROFILE%\%~i\." "%OneDrive%\%~i\." *.* /MOV /FP /NP /IS /Z /E /L
  • 在 bat/cmd 文件中:
@echo off  

for %%i in ("3D Objects",Contacts,Desktop,Documents,Favorites,Links,Music)do RoboCopy.exe "%USERPROFILE%\%~i\." "%OneDrive%\%%~i\." *.* /MOV /FP /NP /IS /Z /E /L

观察:2 您可以在此添加/删除所需的文件夹(“loop itens”),注意在名称中有空格的地方使用双引号:"3D Objects"

  • 进一步阅读:

[√]为了

[√]对于/f

[√]复制

[√]RoboCopy.doc(|Google/doc|)

[√]如何批量移动并保留文件夹结构?

相关内容