Я вроде как новый для пакетных команд и пытался автоматизировать что-то, что мы делаем вручную. У меня есть файл журнала, который загружается каждый день, затем я ищу определенные элементы в нем, используя Findstr (вывод в другой файл), а затем разделяю то, что было найдено в более мелкие файлы.Команды командного файла - Findstr, разделение и переменные имени файла
У меня возникли проблемы с созданием имен файлов и переменных имени файла и их использованием во всем моем коде. Мне был передан код сплиттера, поэтому я просто пытаюсь включить Findstr в него. Любые советы или посмотреть, что я делаю неправильно?
Пример:
Campaign ID: 1234 Campaign Name: Pepsi Impression Filename: 10-06-16_file.log Day of week: 2
Это будет выглядеть через 10-06-16_file.log
для любых строк с ID кампании 1234
и вывода их на fnd_10-06-16_file.log
.
Если fnd_10-06-16_file.log
размер файла больше, чем 177000kb затем разбить файл на более мелкие файлы с именем 2SplitFile1_Pepsi.log
, 2SplitFile2_Pepsi.log
, 2SplitFile3_Pepsi.log
и т.д.
setlocal ENABLEDELAYEDEXPANSION
@echo off
REM Ask for Campaign information to find
SET /P campaignid="Campaign ID(s): "
SET /P campaignname="Campaign Name: "
SET /P impressionfile="Impression Filename: "
SET /P dayofweek="Day of week: "
SET fnd_impressionfile=%campaignname%_%impressionfile%
SET maxbytesize=177000
SET fnd_impressionfile_sz=%%~zfnd_impressionfile
REM Find campaigns inside log file
findstr "%campaignname%" %impressionfile% > %fnd_impressionfile%
REM Split log file if greater than 177000 kb
if fnd_impressionfile_sz > maxbytesize (
REM Edit this value to change the name of the file that needs splitting. Include the extension.
SET BFN=%fnd_impressionfile%
REM Edit this value to change the number of lines per file.
SET LPF=1000000
REM Edit this value to change the name of each short file. It will be followed by a number indicating where it is in the list.
SET SFN=SplitFile
REM Do not change beyond this line.
SET SFX=%BFN:~-3%
SET /A LineNum=0
SET /A FileNum=1
For /F "delims=" %%l in (%BFN%) Do (
SET /A LineNum+=1
echo %%l >> %dayofweek%%SFN%!FileNum!_%campaignname%.%SFX%
if !LineNum! EQU !LPF! (
SET /A LineNum=0
SET /A FileNum+=1
)
)
)
endlocal
pause
Вы пытаетесь получить размер файла показа с помощью этого кода: 'SET fnd_impressionfile_sz = %% ~ zfnd_impressionfile'. Если да, то это не так, как это работает. Для этого вам нужно использовать команду FOR. – Squashman