2017-02-15 10 views
1

Я пытаюсь объединить файлы с логикой, чтобы заполнить отсутствующие данные. Я , имеющие проблемы с if errorlevelПытается объединить файлы с логикой, чтобы заполнить отсутствующие данные. * создание плоской базы данных?

@echo off 
SETLOCAL enableDelayedExpansion 
del /q porttemp.csv 
del /q database.csv 
rem CMD BATCH-FILE Trying to merge files with logic to fill missing data. 
rem * building a flat database ? 
rem *** Reading temp3.csv looking for match in temp4.csv, ie 34/0/23 
rem *** if not found trying to add "blank" to output file 
echo ********* Phase 1 begin ******* 
:part1 
FOR /F "tokens=1,2,3,4* delims=," %%a IN (temp3.csv) do (
    rem parse thru temp3.csv 
    echo LOOP 1 - %%a,%%b,%%c,%%d 
    for /F "tokens=1,2* delims=, " %%M in (temp4.csv) do (

     rem is %%a found in temp4.csv 
     rem if true output %%a,%%b,%%c,%%M 
     rem if false output %%a,%%b,%%c,blank 
     findstr %%a temp4.csv 
     if /I ERRORLEVEL EQU 0 (echo %%a,%%b,%%c,%%M >> porttemp.csv) ELSE (echo %%a,%%b,%%c,blank >> porttemp.csv) 
     echo Loop 2 - debug output - %ERRORLEVEL% -%%a,%%b,%%c vs %%M,%%N 
     pause 
     ) 
) 
type porttemp.csv 

temp3.csv содержит:

Gi-34/0/10_,lpu,w-3-018ch1swA2p19_lag Gi-34/0/11_,lpu,prodca1_lan_sec 
Gi-34/0/12_,lpu,prodca2_lan_sec Gi-34/0/13_,lpd, Gi-34/0/14_,lpd, 
Gi-34/0/15_,lpd, Gi-34/0/16_,lpd, Gi-34/0/17_,lpd, 
Gi-34/0/18_,lpu,aix_to_hmc Gi-34/0/19_,lpu,prodcafl1_lan_sec 
Gi-34/0/02_,lpu,w-3-016ch1swA2p19_lag 
Gi-34/0/20_,lpu,prodcafl2_lan_sec Gi-34/0/21_,lpu,prodcafl3_lan_sec 
Gi-34/0/22_,lpu,prodcafl4_lan_sec Gi-34/0/24_,lpd, 
Gi-34/0/25_,lpu,CHARONHOST2_DARLA Gi-34/0/26_,lpu,Centera_c001n03 
Gi-34/0/27_,lpu,Centera_c001n01 Gi-34/0/28_,lpu,Centera_c001n02 
Gi-34/0/29_,lpu,Centera_c001n04 Gi-34/0/03_,lpu,w-3-016ch2swA1p19_lag 
Gi-34/0/30_,lpu,Centera_c002n03 Gi-34/0/31_,lpu,Centera_c002n02 
Gi-34/0/32_,lpu,Centera_c002n04 Gi-34/0/33_,lpu,Centera_c002n01 
Gi-34/0/34_,lpu,CHARONHOST2 Gi-34/0/35_,lpd, Gi-34/0/36_,lpd, 
Gi-34/0/37_,lpd, Gi-34/0/38_,lpu,TMC_Flex7_cmm2 
Gi-34/0/39_,lpu,TMC-TPC_Sec 

temp4.csv файл содержит:

98be:947e:257c,Gi-34/0/18_ 5cf3:fc39:a194,Gi-34/0/23_ 
aa00:0400:64a4,Gi-34/0/25_ d43d:7e7d:8e4e,Gi-34/0/26_ 
d43d:7ec1:f280,Gi-34/0/27_ d43d:7e7d:9770,Gi-34/0/28_ 

ответ

0

ИМХО ты над усложнять , Если вы установили уаг перед испытующим temp4.csv к пустому и только процессу не находит в temp4.csv существует никакой необходимости в случае, если:

@echo off 
SETLOCAL enableDelayedExpansion 
del /q porttemp.csv 
del /q database.csv 
rem CMD BATCH-FILE Trying to merge files with logic to fill missing data. 
rem * building a flat database ? 
rem *** Reading temp3.csv looking for match in temp4.csv, ie 34/0/23 
rem *** if not found trying to add "blank" to output file 
echo ********* Phase 1 begin ******* 
:part1 
FOR /F "tokens=1-4* delims=," %%a IN (temp3.csv) do (
    rem parse thru temp3.csv 
    echo LOOP 1 - %%a,%%b,%%c,%%d 
    Set "BlankorM=" 
    for /F "tokens=1,2* delims=, " %%M in (
     'Findstr /I "%%a" temp4.csv' 
    ) do Set "BlankorM=%%M" 
    echo %%a,%%b,%%c,!BlankorM! >> porttemp.csv 
) 
type porttemp.csv 
1

Вот версия, похожа на LotPings, но с чем-нибудь ненужной для фактического конца цель удалена:

@Echo Off 
SetLocal EnableDelayedExpansion 
(For /F "UseBackQ Tokens=1-3 Delims=," %%A In ("temp3.csv") Do (Set "_=blank" 
    For /F "Delims=," %%D In ('Find /I "%%A "^<"temp4.csv"') Do Set "_=%%D" 
    Echo=%%A,%%B,%%C,!_!))>porttemp.csv 
Type porttemp.csv 

Удалить слово blank на линии 3, если вы действительно хотите, ничего не будет выводиться после запятой.

+0

Также отлично работал. Просто переполняет мой разум !!!! – user7559673