@璐村惂鐢ㄦ埛_000076K馃惥 off
:call
set call=%1
if /i defined call set call=%call:"= %
if /i defined call set "call=%call:(= %"
if /i defined call set "call=%call:)= %"
if /i defined call set "call=%call:|= %"
if /i defined call for /f "tokens=1" %%A in ('echo.%call%') do for %%B in (
main
) do if /i "%%~A"=="%%~B" (
call "%~0" %2 %3 %4 %5 %6
goto :eof
)
if /i defined call for /f "tokens=1" %%A in ('echo.%call%') do for %%B in (
help.basic
func func.path
data[1] dir[1] dir[1].path
data[2] dir[2] dir[2].path
fc.equ fc.neq
fc sysDT word path cut strsize
) do if /i "%%~A"=="%%~B" (
goto :__%%~B
)
:load
setlocal DISABLEDELAYEDEXPANSION
set local=1
set error=0
:include
rem NULL
:main (FILE asSource[], FILE output, FILE backup, FILE asStore[], int nCase){void}
rem
rem created 08:57 2023/03/12
rem modify 22:03 2023/03/14
rem finish 04:57 2023/03/17
rem examine 10:31 2023/03/17
rem
rem 文件滤重脚本主界面
rem
rem ---------------- 基础参数设置 ----------------
rem
for %%A in (
asSource[] output backup asStore[]
dir[1].m_asDir[] dir[2].m_asDir[]
) do set %%A=
rem
for /l %%a in (1,1,5) do set nul[%%a]=0
for %%a in (%1) do for /f "tokens=*" %%b in ('echo.%%~a') do set nul[1]=1
for %%a in (%2) do for /f "tokens=*" %%b in ('echo.%%~a') do set nul[2]=1
for %%a in (%3) do for /f "tokens=*" %%b in ('echo.%%~a') do set nul[3]=1
for %%a in (%4) do for /f "tokens=*" %%b in ('echo.%%~a') do set nul[4]=1
for %%a in (%5) do for /f "tokens=*" %%b in ('echo.%%~a') do set nul[5]=1
rem
set nul=%1
set nul=%nul:"=%
set nul=%nul:"=%
set nul=%nul:~0,2%
if %nul[1]% equ 0 call "%~0" help.basic
if %nul[1]% equ 1 if /i "%nul%"=="/h" (
call "%~0" help.basic
goto :~eof
)
rem
for %%a in (asSource[] output backup asStore[] nCase) do set %%a=
rem
rem 来源;文件源的目录组
if %nul[1]% equ 1 for /f "tokens=*" %%A in ('call "%~0" word %1') do set asSource[]=%%A
if %nul[1]% equ 0 set /p asSource[]=[查重](必填)文件源目录组(分隔符"/")asSource[]:_
rem
rem 保存;存放唯一文件
if %nul[2]% equ 1 for /f "tokens=*" %%A in ('call "%~0" word %2') do set output=%%A
if %nul[2]% equ 0 if %nul[1]% equ 0 set /p output=[保存](选填)存档目录 output:_
rem
rem 留底;存放重复文件和文件操作记录
if %nul[3]% equ 1 for /f "tokens=*" %%A in ('call "%~0" word %3') do set backup=%%A
if %nul[3]% equ 0 if %nul[1]% equ 0 set /p backup=[留底](选填)备份目录 backup:_
rem
rem 库存;作比较的目录组
if %nul[4]% equ 1 for /f "tokens=*" %%A in ('call "%~0" word %4') do set asStore[]=%%A
if %nul[4]% equ 0 if %nul[1]% equ 0 set /p asStore[]=[检库](选填)存储仓目录组(分隔符"/")asStore[]:_
rem
rem 换名;用重文件短名称替换库存内同文件长名称
if %nul[5]% equ 1 for /f "tokens=*" %%A in ('call "%~0" word %5') do set nCase=%%A
if %nul[5]% equ 0 if %nul[1]% equ 0 set /p nCase=[换名](选填)用重文件短名替换[保存]与[检库]内超过40字符长度的同文件长名,是否执行(0:别;1:只改保存;2:要;3:只改检库)nCase:_
rem
rem ---------------- 整理参数 ----------------
rem
setlocal ENABLEDELAYEDEXPANSION
set /a local=%local% + 1
rem
for /f "tokens=*" %%A in ('call "%~0" sysDT') do set "sysDT=%%~A"
for /l %%a in (1,1,5) do set tmp[%%a]=
rem
for /l %%a in (1,1,5) do set nul[%%a]=0
if /i defined asSource[]set nul[1]=1
if /i defined outputset nul[2]=1
if /i defined backupset nul[3]=1
if /i defined asStore[]set nul[4]=1
if /i defined nCaseset nul[5]=1
if %nul[2]% equ 0 for /f "tokens=1 delims=/" %%A in ('echo.%asSource[]%') do set "tmp[2]=%%~A"
if %nul[2]% equ 0 set "output=%tmp[2]%\$output_%sysDT%"
if %nul[3]% equ 0 if %nul[2]% equ 0 set "backup=%tmp[2]%\$backup_%sysDT%"
if %nul[3]% equ 0 if %nul[2]% equ 1 set "backup=%output%\$backup_%sysDT%"
if %nul[2]% equ 1 (
for /f "tokens=*" %%A in ('echo.%output%') do (
for /f "tokens=*" %%B in ('echo.%asSource[]:"=%/ ^| find /i "%%~A/"') do (
set output=%%~A\$output_%sysDT%
if %nul[3]% equ 0 (
set backup=%%~A\$backup_%sysDT%
set nul[3]=1
)))
)
if %nul[3]% equ 1 (
for /f "tokens=*" %%A in ('echo.%backup%') do (
for /f "tokens=*" %%B in ('echo.%asSource[]:"=%/ ^| find /i "%%~A/"') do (
set backup=%%~A\$backup_%sysDT%
set nul[3]=1
))
)
if %nul[5]% equ 1 (
set nCase=,!nCase!
set nCase=!nCase:"=!
set nCase=!nCase:~1!
)
if /i not defined nCase set nCase=0
rem
for /l %%a in (1,1,4) do set nul[%%a]=
if /i defined asSource[]set nul[1]=asSource[]
if /i defined outputset nul[2]=output
if /i defined backupset nul[3]=backup
if /i defined asStore[]set nul[4]=asStore[]
set for_cmd[1]=%nul[2]% %nul[3]%
set for_cmd[2]=%nul[1]% %nul[4]%
for %%A in (%for_cmd[1]% %for_cmd[2]%) do set %%A=!%%A:"=!/
for %%A in (%for_cmd[2]%) do for %%B in (%for_cmd[1]%) do set "%%~A=!%%~A:%%~B=!"
for %%A in (%for_cmd[1]%) do for /f "tokens=*" %%B in ('call "%~0" path "!%%~A!"') do set "%%~A=%%~B"
if /i "%backup%"=="%output%" set "backup=%backup%\$backup_%sysDT%"
rem
for %%A in (%for_cmd[2]%) do (
set nul="!%%A!"
set nul=!nul:/=/","!
set %%A=
for %%B in (!nul!) do (
for /f "tokens=*" %%C in ('call "%~0" path "%%~B" ^| find /v /i "/"') do (
for /f "tokens=*" %%D in ('echo.!%%A! ^| find /c /i "%%~C/"') do (
if %%D equ 0 if /i not "%%~C"=="," set %%A=!%%A!,"%%~C/"
))
)
for /f "tokens=*" %%B in ('echo.!%%A! ^| find /i "/"') do (
set %%A=!%%A:/=!
)
)
set asStore[]="%output%",%asStore[]%
rem
set dir[1].m_asDir[]=%asSource[]%
set dir[2].m_asDir[]=%asStore[]%
rem
echo.---------------- 实例数据 ----------------
rem
echo. [查重]%dir[1].m_asDir[]%
echo. [保存]%output%
echo. [留底]%backup%
echo. [检库]%dir[2].m_asDir[]%
echo.
echo.---------------- Loading ----------------
set time.start=%date:~0,10% %time%
rem
echo.[开始调用循环体]
rem
call "%~0" dir[1]
rem
echo.---------------- Exit ----------------
set time.stop=%date:~0,10% %time%
echo.
echo.[结束调用循环体]
rem
echo. [启用时间:_]%time.start%
echo. [停用时间:_]%time.stop%
rem
for /f "tokens=*" %%A in ('call "%~0" sysDT') do (
echo. [备用命名:_]%%~A
)
echo.
echo.[提示]
rem
echo. 可直接对脚本输入"/h"获取关于用在其它脚本的外部调用方式
echo.
echo.[存放位置]
rem
echo. [保存]%output%
echo. [留底]%backup%
rem
:main_eof
:~eof
for /l %%a in (1,1,%local%) do endlocal
goto :eof