Создание пакетного файла для сортировки журналов в соответствующие папки по месяцам и годам ...? - PullRequest
0 голосов
/ 10 сентября 2018

В связи с этим есть некоторые неопределенные или похожие вопросы, которые я постарался собрать изо всех сил, но не уверен, правильно ли я это сделал или нет.

Цель пакетного файла - найти дату в именах файлов, создать папку, в которой месяц и год даты этого имени файла указаны с префиксом «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-2017», создать папку «01 октября 2017» в каталоге над текущим и переместить там, при условии, что не существует другой папки с именем 01 мая 2017 года, например, или любой другой папки, начинающейся с имени 01 (кроме уже созданной папки назначения, в этом случае пакет просто переместит файл без необходимости создавать отдельную папку с тот же месяц и год, но с другим префиксом, который не нужен, поэтому я не хочу папок «01 октября 2017» и «02 октября 2017», если уже существует, например, 01 октября 2017 года), он должен быть крутым и если он есть, он будет повторяться до тех пор, пока не найдет неиспользуемое число, каждый раз набирая +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 голосов
/ 11 сентября 2018

все еще не совсем уверен, я правильно вас понял. Пожалуйста, попробуйте следующий код и проверьте его вывод, если он делает, что вы хотите.

@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 из соображений безопасности

...