2016-10-06 105 views
1

我是一种新的批处理命令,并试图自动化我们手动做的事情。我有一个每天下载的日志文件,然后使用Findstr(输出到另一个文件)搜索其中的某些项目,然后将发现的内容拆分为较小的文件。批处理文件命令 - Findstr,分裂和文件名变量

我在制作文件名和文件名变量时遇到了问题,并在我的代码中使用它。 splitter代码给了我,所以我只是试图将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.log2SplitFile2_Pepsi.log2SplitFile3_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 
+2

您是否试图使用此代码获取展示文件的大小:SET fnd_impressionfile_sz = %%〜zfnd_impressionfile'。如果是这样,那不是它的工作原理。你需要使用FOR命令来做到这一点。 – Squashman

回答

0

首先,更改SET fnd_impressionfile_sz=%%~zfnd_impressionfileFOR %%a in (%fnd_impressionfile%) DO SET fnd_impressionfile_sz=%%~za

然后,仔细检查你maxbytesize。你的描述说kb,但批处理意味着字节。 fnd_impressionfile_sz包含字节值。

我看到的另一件事是在那里你使用重定向操作符>在if fnd_impressionfile_sz > maxbytesize。您应该将其更改为GTRGEQ。请参阅HELP IF