创建批处理文件以将日志分类到各自的月年文件夹中......?
Creating a batch file to sort logs into their respective month year folders...?
关于这个有一些模糊或相似的问题,我试图尽我最大的能力拼凑起来,但不确定我是否做对了。
批处理文件的目标是查找文件名上的日期,创建一个文件夹,其中该文件名日期的月份和年份指定为“01”前缀,并将其移动到那里。创建的文件夹的位置将比当前日志文件所在的位置高一级。如果文件夹名称已经存在前缀为“01”但月份和年份不同,它将创建一个前缀为“ 02”,如果它已经存在,那么它会继续创建一个前缀为“03”的文件夹,这将继续下去,直到它找不到任何更多具有它试图创建的前缀的文件夹,并继续使用该未使用的前缀创建一个月年文件夹。
现在是代码,这是我现在拥有的:
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.log) do (
if exist *-10-2017*.log (
if exist 01* && not *01*.log (
set "iter="
set /p iter=01
set /a iter+=1
set f1=!%inter%" October"!
md "..\!f1!"
move "%%a" "!f1!"
) else (
md "01 October 2017" 2>nul
move "%%a" "01 October 2017"
)
)
)
那只是 2017 年 10 月的,所以应该做的是检查日志文件名的日期,如果它在文件名中的任何地方有“-10-2017”,则在当前目录上方的目录中创建一个文件夹“2017 年 10 月 1 日”并移动到那里,假设不存在另一个名为 01 May 2017 的文件夹或任何其他以名称 01 开头的文件夹(除了已经创建的目标文件夹,在这种情况下,批处理将直接移动文件而无需创建单独的文件相同月份和年份的文件夹,但前缀不同,这是不必要的,所以我不想要“2017 年 10 月 1 日”和“2017 年 10 月 2 日”文件夹,例如,如果已经存在 2017 年 10 月 1 日),它应该是很酷,如果有,它会迭代直到找到一个未使用的数字,每次都+01,然后继续使用它作为前缀。
但这不起作用,因为我停在了:
E:\SteamCMD\KFServer\UserLogs\unread\test>SETLOCALENABLEDELAYEDEXPANSION
&& was unexpected at this time.
我已经找到了一个工作片段,这是我修改它的地方:
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.log) do (
set f=%%a
set g=!f:~92,10!
md "!g!" 2>nul
move "%%a" "!g!"
)
)
但它只是将它们移动到它们各自的日期文件夹中,我希望它们在月份和年份的命名约定中和上一级以及在文件夹名称上添加 01 前缀以便于排序和搜索后来.....还有另一个问题是,如果同一月份和同一年但不同日期的另一个日志通过(例如 15-10-2017.log 和 10-10-2017.log),它会在他们自己的文件夹中,当我可以按月份而不是按日期对日志进行分组时会造成更多混乱....
所以我有两个选择 - 用这个把我的手臂举到空中或者只使用工作批次但手动完成额外的任务来完成它......所以是的,我更愿意让计算机以我最少的努力为我完成所有工作,所以请帮助我解决这个问题或更正我的代码并解释为什么它是错误的或者它必须是这样....
☺
亲切的问候,
新(oo)b编码器
还是不太确定,我没看错。请尝试下面的代码并检查它的输出,如果是,就是你想要的。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set m=0
for %%a in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
set /a m+=1
set "m[!m!]=%%a"
)
for /l %%Y in (2010,1,2020) do (
for /l %%M in (1,1,12) do (
set /a mm=%%M+100
set "mm=!mm:~-2!"
if exist "*!mm!-%%Y*.log" (
ECHO md "!mm! !m[%%M]! %%Y" 2>nul
ECHO move "*!mm!-%%Y*.log" "!mm! !m[%%M]! %%Y\"
)
)
)
出于安全原因,我解除了 md
和 move
命令
关于这个有一些模糊或相似的问题,我试图尽我最大的能力拼凑起来,但不确定我是否做对了。
批处理文件的目标是查找文件名上的日期,创建一个文件夹,其中该文件名日期的月份和年份指定为“01”前缀,并将其移动到那里。创建的文件夹的位置将比当前日志文件所在的位置高一级。如果文件夹名称已经存在前缀为“01”但月份和年份不同,它将创建一个前缀为“ 02”,如果它已经存在,那么它会继续创建一个前缀为“03”的文件夹,这将继续下去,直到它找不到任何更多具有它试图创建的前缀的文件夹,并继续使用该未使用的前缀创建一个月年文件夹。
现在是代码,这是我现在拥有的:
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.log) do (
if exist *-10-2017*.log (
if exist 01* && not *01*.log (
set "iter="
set /p iter=01
set /a iter+=1
set f1=!%inter%" October"!
md "..\!f1!"
move "%%a" "!f1!"
) else (
md "01 October 2017" 2>nul
move "%%a" "01 October 2017"
)
)
)
那只是 2017 年 10 月的,所以应该做的是检查日志文件名的日期,如果它在文件名中的任何地方有“-10-2017”,则在当前目录上方的目录中创建一个文件夹“2017 年 10 月 1 日”并移动到那里,假设不存在另一个名为 01 May 2017 的文件夹或任何其他以名称 01 开头的文件夹(除了已经创建的目标文件夹,在这种情况下,批处理将直接移动文件而无需创建单独的文件相同月份和年份的文件夹,但前缀不同,这是不必要的,所以我不想要“2017 年 10 月 1 日”和“2017 年 10 月 2 日”文件夹,例如,如果已经存在 2017 年 10 月 1 日),它应该是很酷,如果有,它会迭代直到找到一个未使用的数字,每次都+01,然后继续使用它作为前缀。
但这不起作用,因为我停在了:
E:\SteamCMD\KFServer\UserLogs\unread\test>SETLOCALENABLEDELAYEDEXPANSION
&& was unexpected at this time.
我已经找到了一个工作片段,这是我修改它的地方:
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.log) do (
set f=%%a
set g=!f:~92,10!
md "!g!" 2>nul
move "%%a" "!g!"
)
)
但它只是将它们移动到它们各自的日期文件夹中,我希望它们在月份和年份的命名约定中和上一级以及在文件夹名称上添加 01 前缀以便于排序和搜索后来.....还有另一个问题是,如果同一月份和同一年但不同日期的另一个日志通过(例如 15-10-2017.log 和 10-10-2017.log),它会在他们自己的文件夹中,当我可以按月份而不是按日期对日志进行分组时会造成更多混乱....
所以我有两个选择 - 用这个把我的手臂举到空中或者只使用工作批次但手动完成额外的任务来完成它......所以是的,我更愿意让计算机以我最少的努力为我完成所有工作,所以请帮助我解决这个问题或更正我的代码并解释为什么它是错误的或者它必须是这样....
☺
亲切的问候, 新(oo)b编码器
还是不太确定,我没看错。请尝试下面的代码并检查它的输出,如果是,就是你想要的。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set m=0
for %%a in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
set /a m+=1
set "m[!m!]=%%a"
)
for /l %%Y in (2010,1,2020) do (
for /l %%M in (1,1,12) do (
set /a mm=%%M+100
set "mm=!mm:~-2!"
if exist "*!mm!-%%Y*.log" (
ECHO md "!mm! !m[%%M]! %%Y" 2>nul
ECHO move "*!mm!-%%Y*.log" "!mm! !m[%%M]! %%Y\"
)
)
)
出于安全原因,我解除了 md
和 move
命令