2017-12-22 7 views
0

meines Ordner Lassen Sie sagen, ist: „C: \ sample \“. Es gibt zwei Arten von .dat-Dateien.Finden Sie ein Wort in den DAT-Dateien und kopieren

One ist

Head #Index Name= "DbResultDataHeadStruct" TypeNo VarType = REG_DWORD 0x8 Data = "" TypeA VarType = REG_DWORD 0x8 Data = ""

andere ist:

Head #Index Name= "DbResultDataHeadStruct" TypeNo VarType = REG_DWORD 0x8 Data = "" TypeB VarType = REG_DWORD 0x8 Data = ""

Wie Sie Unterschiede sehen nur TypeA und TypeB. Ich möchte Datei kopieren/ausschneiden, wenn TypeA in der .dat-Datei zu "C: \ sample \ TypeA" und selbe für TypeB zu "C: \ sample \ TypeB" ist. Diese Batchdatei wartet immer auf eine neue Datei. Ich fand diesen Code unten, aber ich konnte es nicht nach mir beheben. Vielleicht wäre es hilfreich.

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "PATTERN=*.dat" 
set "SOURCE=C:\sample\" 
set "TARGET=C:\sample\TypeA" 
set "STRING1=TypeA" 
set "STRING2=TypeB" 

pushd "%SOURCE%" && (
for /F "delims=" %%F in ('findstr /S /M /I /R /C:"\<%STRING1%\>" "%PATTERN%"') do (
    for /F "delims=" %%E in ('findstr /M /I /R /C:"\<%STRING2%\>" "%%F"') do (
     ECHO copy "%%E" "%TARGET%\%%~nxE" 
    ) 
) 
popd 
) 

endlocal 
exit /B 

Antwort

0

Ich habe eine Lösung gefunden mit findstr und move-Befehlen.

Ich habe Timeout zu hinzugefügt. Es überprüft den Ordner alle 10 Sekunden.

@echo OFF 
setlocal enableextensions disabledelayedexpansion 

set "source=C:\sample\*.dat" 
set "target=C:\sample\TypeA\OpMode" 
set "target2=C:\sample\TypeB\Error" 
set "searchString=OpMode" 
set "searchString2=Error" 

:loop 
set "found=" 
for /f "delims=" %%a in (' 
    findstr /m /i /l /c:"%searchString%" "%source%" 2^>nul 
') do (
    if not defined found set "found=1" 
    move "%%a" "%target%" 
) 



set "found=" 
for /f "delims=" %%a in (' 
    findstr /m /i /l /c:"%searchString2%" "%source%" 2^>nul 
') do (
    if not defined found set "found=1" 
    move "%%a" "%target2%" 
) 

timeout /T 10 

goto loop 
Verwandte Themen