Próbuję połączyć pliki z logiką, aby wypełnić brakujące dane. Jestem Posiadanie problemów z 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 zawiera:

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 zawiera:

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_
1
user7559673 15 luty 2017, 22:14

2 odpowiedzi

Najlepsza odpowiedź

Imho robisz skomplikowane rzeczy. Jeśli ustawisz ALAR PRIRE Wyszukiwanie temp4.csv na pusty i tylko proces znajdujący się w TEMP4.CSV nie ma potrzeby, jeśli:

@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
0
user6811411user6811411 15 luty 2017, 21:39

Oto wersja, podobna do lotpingów, ale z czymś niepotrzebnym dla rzeczywistego celu usunięcia:

@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

Wyjmij słowo blank On Line 3 Jeśli naprawdę nie chcesz, aby nic nie mogło zostać wyprowadzane po przecinku.

1
Compo 15 luty 2017, 22:21