2014-11-17 5 views
0

300 개 이상의 텍스트 파일이있는 폴더가 있습니다. 나는 각 텍스트 내에서 다음과 같은 라인으로 특정 날짜 이후에 찾을 수있는 배치 스크립트를 만들려고합니다 :"X"날짜 다음에 문자열 찾기

---------- \ SC#### SVR #### \ E $ \ 사용자 \ SC#### POS는 #### \ E2ELOGS \ PED_ _110913.DBG : 1

으로 표시된 날짜 형식은 예를 들어 YYYYMMDD

것 :

set filedatetime=10/11/2014 12:26 
set filedatetime=%filedatetime:~6,4%%filedatetime:~3,2%%filedatetime:~0,2% 
echo "%filedatetime%" 

FINDSTR "%FILEDATETIME%" C:\RESULTS\*.TXT 

findstr 결과가 20141110보다 GTR 인 경우 다른 txt 파일로 회선을 반향합니다.

+0

은 날짜 주변에 '_'가 표시되는 유일한 장소입니까? – npocmaka

+0

예 : _ 존재하는 곳만 날짜 주변에 표시됩니다. –

답변

0
@echo off 
setlocal 

set /a filedatetime=20141124 
set sourcedir= 
set outfile=E:\outfile.txt 

REM There are 3 underscores per record in the input files, creating 4 tokens. The third token (%%c) is the date in the filename. 
REM Due to the presence of at least one backup file named "BACK_*", which adds a fourth underscore, we filter that out. 

for /f "tokens=1-4 delims=_" %%a in ('findstr /r ".*_.*_.*" "%sourcedir%\*.txt"') DO (
if %%c geq %filedatetime% echo %%a_%%b_%%c_%%d | find /I /V "BACK" >>%outfile% 
) 

rem type newfile.txt 

goto :EOF 
exit 
0

문자열의 날짜 부분이 항상 같은 위치에 있으면 간단히 문자열 처리 함수를 사용하여 구문 분석 할 수 있습니다. 이 시점에서 필요하면 정수로 변환 한 다음 결과를 대상 날짜와 비교하십시오.

+0

예, 항상 같은 위치에 있습니다. –

+0

사용하는 스크립팅 언어에서 사용할 수있는 문자열 처리 함수는 무엇입니까?x 이전의 모든 선행 문자를 제거하는 기능과 y 이후의 모든 문자에 대해 동일한 기능을 수행하는 기능을 찾습니다. 여기서 x와 y는 문자 색인 매개 변수입니다. –

0
@ECHO OFF 
SETLOCAL 
SET filedatetime=20141116 
SET "sourcedir=U:\sourcedir\t w o" 

(
FOR /f "tokens=1-3delims=_" %%a IN ('findstr /r ".*_.*_.*" "%sourcedir%\*.txt"') DO (
IF %%b geq %filedatetime% ECHO %%a_%%b_%%c 
) 
)>newfile.txt 

TYPE newfile.txt 

GOTO :EOF 

귀하의 상황에 맞게 sourcedir 설정을 변경해야합니다.

newfile.txt 내가 테스트의 편의를 위해 고정 된 날짜를 사용하여 새 파일을 생성합니다.

geq은 선택한 날짜와 같거나 큰 라인을 생성합니다. gtr은 ~보다 엄격하게 산출됩니다. 여기


(나는 그것을 생략 한)

-S\PED_20140129_110913.DBG: 1 
-S\PED_20140229_110913.DBG: 1 
-S\PED_20140329_110913.DBG: 1 
-S\PED_20140429_110913.DBG: 1 
-S\PED_20140529_110913.DBG: 1 
-S\PED_20140629_110913.DBG: 1 
-S\PED_20140729_110913.DBG: 1 
-S\PED_20140829_110913.DBG: 1 
-S\PED_20140929_110913.DBG: 1 
-S\PED_20141029_110913.DBG: 1 
-S\PED_20141129_110913.DBG: 1 
-S\PED_20141229_110913.DBG: 1 

그리고 결과 내 테스트 데이터입니다 :

U:\sourcedir\t w o\extra.txt:-S\PED_20141129_110913.DBG: 1 
U:\sourcedir\t w o\extra.txt:-S\PED_20141229_110913.DBG: 1 
나는 문제가 파일 이름 섹션에 제안했다

- 밑줄이 나타나면 비교를 위해 부정확 한 문자열이 취해질 것입니다.

당신은 문자열 비교되고있는 보여줄 것이다 (교체 if 문)

IF %%b geq %filedatetime% ECHO "%%b" geq "%filedatetime%" 

와이를 테스트 할 수있다.

분리 아웃 데이터로부터 파일명을
@ECHO OFF 
SETLOCAL 
SET filedatetime=20141116 
SET "sourcedir=U:\sourcedir\t w o" 

(
FOR /f "tokens=1,2,*delims=:" %%p IN ('findstr /r ".*_.*_.*" "%sourcedir%\*.txt"') DO (
FOR /f "tokens=1-3delims=_" %%a IN ("%%r") DO (
    IF %%b geq %filedatetime% ECHO %%p:%%q:%%a_%%b_%%c 
) 
) 
)>newfile.txt 

TYPE newfile.txt 

GOTO :EOF 

가 설정만으로 데이터를 처리 :

이 그 문제를 해결한다.

+0

이 스크립트는 성공적으로 실행되지만, filedatetime 이전에 날짜를 많이 받았습니다. 1 결과는 입니다. \\ Server \ Results \ Test.TXT : ---------- \\ Server2 \ E $ \ Logs \ PED_20140429 2014 년 4 월 29 일부터 확인할 수 있듯이 –

+0

filedatetime이 설정된 것과 같은 결과가 나옵니다. –