用于将手机 phone 中的图片整理到文件夹中的批处理文件(在 Windows 上)
Batch File to organise pictures from mobile phone into folders (on Windows)
我刚刚创建了我的第一个批处理文件,用于将我的手机 phone 图片整理到文件夹中(在 Windows 上)。
它奏效了,我只是想知道是否有更有效的编码方式,因为在目前的形式下,我将不得不经历所有可能的年月组合。
if exist 2018*.* md 2018
if exist 2019*.* md 2019
if exist 2020*.* md 2020
move 2018*.* 2018
move 2019*.* 2019
move 2020*.* 2020
if exist 2018\????_03_*.* md 2018\March
if exist 2018\????_04_*.* md 2018\April
if exist 2018\????_05_*.* md 2018\May
move 2018\????_04_*.* 2018\April
move 2018\????_05_*.* 2018\May
move 2018\????_03_*.* 2018\March
if exist 2019\????_03_*.* md 2019\March
if exist 2019\????_04_*.* md 2019\April
if exist 2019\????_05_*.* md 2019\May
move 2019\????_04_*.* 2019\April
move 2019\????_05_*.* 2019\May
move 2019\????_03_*.* 2019\March
if exist 2020\????_03_*.* md 2020\March
if exist 2020\????_04_*.* md 2020\April
if exist 2020\????_05_*.* md 2020\May
move 2020\????_04_*.* 2020\April
move 2020\????_05_*.* 2020\May
move 2020\????_03_*.* 2020\March
@echo off
for /f "tokens=1,2,* delims=_" %%A in ('
dir /b /a-d ????_??_*.* ^| findstr /b "20[0-9][0-9]_"
') do (
for %%D in (
"01 January"
"02 February"
"03 March"
"04 April"
"05 May"
"06 June"
"07 July"
"08 August"
"09 September"
"10 October"
"11 November"
"12 December"
) do (
for /f "tokens=1,2" %%E in ("%%~D") do (
if "%%~B" == "%%~E" (
if not exist "%%~A\%%~F\" md "%%~A\%%~F\"
if exist "%%~A\%%~F\" move "%%~A_%%~B_%%~C" "%%~A\%%~F\" >nul
)
)
)
)
这使用 ????_??_*.*
模式,如果 findstr
检测到第一个四个字符是 21 世纪年份的数字并带有下划线,则允许使用。然后它从第二个令牌中的 2 位数字中获取月份。它检查目录 year\month\
是否存在,如果不存在则创建它。如果目录 year\month\
存在,则将文件复制到目录中。
for
变量:
A
年数
B
月份数字
C
文件名的剩余部分
D
月份数字和姓名
E
月份数字
F
月份名称
查看 for /?
以帮助理解 for
循环。
我刚刚创建了我的第一个批处理文件,用于将我的手机 phone 图片整理到文件夹中(在 Windows 上)。 它奏效了,我只是想知道是否有更有效的编码方式,因为在目前的形式下,我将不得不经历所有可能的年月组合。
if exist 2018*.* md 2018
if exist 2019*.* md 2019
if exist 2020*.* md 2020
move 2018*.* 2018
move 2019*.* 2019
move 2020*.* 2020
if exist 2018\????_03_*.* md 2018\March
if exist 2018\????_04_*.* md 2018\April
if exist 2018\????_05_*.* md 2018\May
move 2018\????_04_*.* 2018\April
move 2018\????_05_*.* 2018\May
move 2018\????_03_*.* 2018\March
if exist 2019\????_03_*.* md 2019\March
if exist 2019\????_04_*.* md 2019\April
if exist 2019\????_05_*.* md 2019\May
move 2019\????_04_*.* 2019\April
move 2019\????_05_*.* 2019\May
move 2019\????_03_*.* 2019\March
if exist 2020\????_03_*.* md 2020\March
if exist 2020\????_04_*.* md 2020\April
if exist 2020\????_05_*.* md 2020\May
move 2020\????_04_*.* 2020\April
move 2020\????_05_*.* 2020\May
move 2020\????_03_*.* 2020\March
@echo off
for /f "tokens=1,2,* delims=_" %%A in ('
dir /b /a-d ????_??_*.* ^| findstr /b "20[0-9][0-9]_"
') do (
for %%D in (
"01 January"
"02 February"
"03 March"
"04 April"
"05 May"
"06 June"
"07 July"
"08 August"
"09 September"
"10 October"
"11 November"
"12 December"
) do (
for /f "tokens=1,2" %%E in ("%%~D") do (
if "%%~B" == "%%~E" (
if not exist "%%~A\%%~F\" md "%%~A\%%~F\"
if exist "%%~A\%%~F\" move "%%~A_%%~B_%%~C" "%%~A\%%~F\" >nul
)
)
)
)
这使用 ????_??_*.*
模式,如果 findstr
检测到第一个四个字符是 21 世纪年份的数字并带有下划线,则允许使用。然后它从第二个令牌中的 2 位数字中获取月份。它检查目录 year\month\
是否存在,如果不存在则创建它。如果目录 year\month\
存在,则将文件复制到目录中。
for
变量:
A
年数B
月份数字C
文件名的剩余部分D
月份数字和姓名E
月份数字F
月份名称
查看 for /?
以帮助理解 for
循环。