围绕此问题,存在一些模糊或类似的问题,我试图尽我所能将其拼凑起来,但是不确定是否正确地进行了操作。
批处理文件的目的是在文件名上查找日期,创建一个文件夹,在该文件夹中以“ 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编码器
答案 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\"
)
)
)
出于安全原因,我撤消了md
和move
命令