@
echo
off
chcp 65001
setlocal enabledelayedexpansion
echo
本代码自52pojie论坛发布共享,需要的可随意自取,转载注明出处,如不当操作造成文件丢失,本人概不负责
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