正在创建批处理文件以将日志分类到各自的月份年份文件夹中?...

时间:2018-09-10 07:06:41

标签: batch-file windows-7 batch-processing

围绕此问题,存在一些模糊或类似的问题,我试图尽我所能将其拼凑起来,但是不确定是否正确地进行了操作。

批处理文件的目的是在文件名上查找日期,创建一个文件夹,在该文件夹中以“ 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日”,然后移动在那里,假设不存在另一个名为例如2017年5月1日的文件夹或任何以01开头的其他文件夹(除了已创建的目标文件夹,在这种情况下,该批处理将仅移入文件而无需创建单独的文件夹相同的月份和年份,但不必使用不同的前缀,因此,例如,如果已经存在2017年10月1日,我不希望“ 2017年10月1日”和“ 2017年10月2日”文件夹)如果存在,它将进行迭代,直到找到未使用的数字为止,每次进行+01,然后继续使用该数字作为前缀。

但是那不起作用,因为我停在了:

E:\SteamCMD\KFServer\UserLogs\11\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编码器

1 个答案:

答案 0 :(得分:0)

我还不太确定,我说对了。请尝试以下代码,并检查其输出(如果有的话),所需的内容。

@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命令