2016-10-06 1 views
1

私は一種のバッチコマンドで、手動で行うことを自動化しようとしています。私は毎日ダウンロードされるログファイルを持っています。そして、Findstr(別のファイルへの出力)を使ってその中の特定の項目を検索し、見つかったものを小さなファイルに分割します。バッチファイルコマンド - Findstr、分割およびファイル名変数

ファイル名とファイル名変数を作成してコード全体で使用する際に問題があります。スプリッターコードが私に与えられたので、Findstrをその中に組み込もうとしています。すべてのヒントや私が間違って何を参照してください?

例:

Campaign ID: 1234 
Campaign Name: Pepsi 
Impression Filename: 10-06-16_file.log 
Day of week: 2 

それはキャンペーンID 1234fnd_10-06-16_file.logに出力すると任意の行について10-06-16_file.logに目を通すだろう。など

fnd_10-06-16_file.logファイルサイズが177000キロバイトよりも大きい場合は、名前2SplitFile1_Pepsi.logと小さなファイルにファイルを分割し、2SplitFile2_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_impressionfile

FOR %%a in (%fnd_impressionfile%) DO SET fnd_impressionfile_sz=%%~zaにを変更maxbytesize。あなたの説明にkbと書かれていますが、バッチはバイトを意味します。 fnd_impressionfile_szにはバイト値が入ります。

もう1つは、if fnd_impressionfile_sz > maxbytesizeのリダイレクション演算子を使用していることです。 GTRまたはGEQに変更する必要があります。 HELP IFを参照してください。

関連する問題