创建一个批处理文件以将日志排序到各自的月年文件夹中..?



围绕这个问题有一些模糊或类似的问题,我试图尽我所能拼凑起来,但不确定我是否正确。

批处理文件的目标是在文件名上查找日期,创建一个文件夹,其中该文件名日期的月份和年份用"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",请在当前目录上方的目录中创建一个文件夹"01 October 2017"并移动到那里,假设不存在另一个名为 01 May 2017 的文件夹或任何其他以名称 01 开头的文件夹(除了已经创建的目标文件夹,在这种情况下,批处理只会移动文件无需创建相同月份和年份的单独文件夹,但使用不同的前缀是不必要的,所以我不想要"01 十月 2017"和"02 十月 2017"文件夹,如果已经存在 01 十月 2017,例如(,它应该很酷,如果有,它会迭代直到找到一个未使用的数字, 每次去+01,然后继续使用它作为前缀。

但这不起作用,因为我被停在:

E:SteamCMDKFServerUserLogs11unreadtest>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"
)
)
)

出于安全原因,我解除了mdmove命令的武装

最新更新