登录网站,浏览更多精彩内容
您需要 登录 才可以下载或查看,没有账号?加入我们
×
群晖NAS从DSM6 升级到DSM 7后,无法自动移动Moments和photo照片到新的Synology Photos。
要解决这个问题,虽然可以将/home/Drive/Moments和\home\photo目录分别移动到/home/Photos下,Synology Photos可以正常检索和索引 ,但是目录存储结构差别很大,
具体如下:
DSM6:
photo的 目录结构是\\DSM918\photo
Moments 目录结构是 \\DSM918\home\用户\drive\Moments\照相设备\年\月\日
DSM7:
Synology Photos 目录结构是 \\DSM918\home\Photos\PhotoLibrary\年\月
直接拷贝会导致存储混乱,强迫症受不了,所以写了这个工具,
可以一键迁移照片并根据照片时间自动按照Synology Photos 目录结构进行迁移,支持本机迁移和两台机器间迁移的
重新修改了下,增加重复文件自动处理逻辑,同时可以显示已处理了文件数
- @echo off
- chcp 65001
- setlocal enabledelayedexpansion
- echo 如不当操作造成文件丢失,本人概不负责
- echo 使用提示:可以先将群晖文件夹映射为本地磁盘或目录后进行操作,当然也可以用网络路径直接操作
- echo 迁移Photo Station,则源文件夹路径“\\DSM918\photo , 例如映射为 Y:"
- echo 迁移 Synology Moments ,则源文件夹 "\\DSM918\home\Drive\Moments, 例如映射为 Y:"
- echo 目标Photo Station,文件夹如无意外是"\\DSM918\home\Photos\PhotoLibrary 例如映射为 Z:"
- set "default_source_dir=D:\Meitu\52ffmpegCheckVedio"
- set "default_dest_dir=D:\Meitu\52"
- echo 请输入源文件夹路径或直接按回车键使用默认路径[%default_source_dir%]:
- set /p "source_dir=源文件夹: "
- if "!source_dir!"=="" set "source_dir=!default_source_dir!"
- echo 请输入目标文件夹路径或直接按回车键使用默认路径[%default_dest_dir%]:
- set /p "dest_dir=目标文件夹: "
- if "!dest_dir!"=="" set "dest_dir=!default_dest_dir!"
- if not exist "!dest_dir!" mkdir "!dest_dir!"
-
- echo.
- echo 请选择操作类型:
- echo [1] 移动文件,不保留源,速度快些
- echo [2] 复制文件,保留源,速度慢些
- set /p "operation=请输入操作编号(1 或 2): "
-
- echo.
- echo 当遇到重复文件时,请选择操作:
- echo [1] 覆盖目标文件
- echo [2] 跳过目标文件
- echo [3] 自动重命名
- set /p "duplicate=请输入操作编号(1 或 2或 3): "
- set "account=1"
-
- ::For主程序
- for /f "delims=" %%a in ('dir /a-d/s/b "!source_dir!"') do (
- set /a "account+=1"
- set "file_name=%%~nxa"
- set "file_na=%%~na"
- set "file_extension=%%~xa"
- set "file_path=%%~dpfa"
- set "file_modify_time=%%~ta"
- set "year=!file_modify_time:~0,4!"
- set "month=!file_modify_time:~5,2!"
- set "new_path=!dest_dir!\!year!\!month!"
- set "counter=1"
- set "new_file_name=!file_na!!file_extension!"
- if not exist "!new_path!" mkdir "!new_path!"
- if "!operation!"=="1" (
- if "!duplicate!"=="1" (
- echo 移动并覆盖第!account!个文件!file_name!到:!new_path!
- move /Y "!file_path!" "!new_path!"
- ) else if "!duplicate!"=="2" (
- echo 文件存在,跳过第!account!个文件:!file_name!
- if not exist "!new_path!\!file_name!" (
- echo 移动文件!file_name!到:!new_path!
- move "!file_path!" "!new_path!"
- )
- ) else if "!duplicate!"=="3" (
- call :rename_file_move
- )
- ) else if "!operation!"=="2" (
- if "!duplicate!"=="1" (
- echo 复制并覆盖第!account!个文件!file_name!到:!new_path!
- xcopy /Y "!file_path!" "!new_path!"
- ) else if "!duplicate!"=="2" (
- echo 文件存在,跳过第!account!个文件:!file_name!
- if not exist "!new_path!\!file_name!" (
- echo 复制文件!file_name!到:!new_path!
- xcopy "!file_path!" "!new_path!"
- )
- ) else if "!duplicate!"=="3" (
- call :rename_file_copy
- )
- )
- )
- echo 已处理!account!个文件,按任意键退出!
- pause
-
- ::goto子程序,直接放入for中会导致程序直接终止
- :rename_file_move
- ::echo 1file_na:!file_na! 2file_extension:!file_extension! 3counter:!counter! 4new_path:!new_path! 5file_path:!file_path! 6new_file_name:!new_file_name!"
- if exist "!new_path!!new_file_name!" (
- echo 存在重复文件!new_file_name!
- set "new_file_name=!file_na!_!counter!!file_extension!"
- echo 重命名源文件: !file_name! to !new_file_name!
- set /a "counter+=1"
- goto :rename_file_move
- )
- echo 已移动第!account!个!file_path!到!new_path!\!new_file_name!
- move "!file_path!" "!new_path!!new_file_name!"
- goto :eof
-
- :rename_file_copy
- ::echo 1file_na:!file_na! 2file_extension:!file_extension! 3counter:!counter! 4new_path:!new_path! 5file_path:!file_path! 6new_file_name:!new_file_name!"
- if exist "!new_path!!new_file_name!" (
- echo 存在重复文件!new_file_name!
- set "new_file_name=!file_na!_!counter!!file_extension!"
- echo 重命名源文件: !file_name! to !new_file_name!
- set /a "counter+=1"
- goto :rename_file_copy
- )
- echo 已复制第!account!个!file_path!到!new_path!\!new_file_name!
- copy /Y "!file_path!" "!new_path!\!new_file_name!"
- goto :eof
复制代码
[mw_shl_code=bash,false]
|
|