我找到了一种手动的方法来做到这一点,如果你转到默认用户文件夹(3D 对象、桌面、下载、文档、收藏夹、图片和视频),右键单击,然后单击属性,然后单击位置,然后可以添加 OneDrive 文件夹位置,然后更改 Windows 设置的路径。
我想要做的是获取一个批处理文件,将用户文件夹逐个更改为 OneDrive 中的预制文件夹,这还将自动将用户文件和文件夹复制到新目的地。
由于这个过程似乎一次只能运行一个文件夹,所以可能需要多个批处理文件才能工作,我对此没意见。
因此,为了澄清这一点,我正在寻找以下步骤:
- 将用户默认用户文件夹位置更改为 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
如果手动完成,系统会提示您是否要将文件和文件夹移动到新目标,我希望系统自动回答“是”,并将文件移动到新的 OneDrive 位置。如果由于文件移动而难以执行此过程,可以将其分成不同的批处理文件。
如果运行此批处理文件并且整个设置已经完成,它将检查默认的 OneDrive 用户文件夹位置,如果用户已经将用户文件夹设置为 OneDrive 中的文件夹,则会显示一条消息通知他们。
如果任何文件或文件夹移动未成功复制,则文件和/或文件夹及其路径的日志将显示在日志文件中,并将生成并保存在
%USERPROFILE%\OneDrive - Olivet Nazarene University\LocalPC\
如果该过程成功,则整个过程结束时在 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
[√]复制