windows - Escaping Pipe '|' i for loop med opkald, få data efter '|'. Virker ikke

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at læse en linje med Pipe '|' i det.
Jeg har bemærket, at uden at rømme pipe ^ |, vil det bare ignorere hele linjen.
Så jeg tilføjede det, men det ser nu ud til at bare læse linjen til røret '|' kun.


Tekst:


Running: Microsoft Windows 7|2008
ExampleExampleExampleExampleExample
ExampleExampleExampleExampleExample
ExampleExampleExampleExampleExample
Running: Microsoft Windows 2008
ExampleExampleExampleExampleExample
Running: Microsoft Windows 2008
ExampleExampleExampleExampleExample
Running: Microsoft Windows XP|2003
ExampleExampleExampleExampleExample
ExampleExampleExampleExampleExample
Running: Microsoft Windows 7|2008


Kode:


@echo off
set local

set "file1=C:UsersIntern3DownloadsNmap1.txt"
echo \%date\%, \%time\% > report1.csv

FOR /f "usebackq delims=^|" \%\%a IN ("\%file1\%") DO (
echo \%\%a
pause
CALL :process \%\%a)

goto :eof

:process
IF "\%~1"=="Running:" echo "Operating System:", \%~2 \%3 \%4 \%5 \%6 >>        
report1.csv


Jeg tilføjede echo \%\% a i for loop, tjek output.
Jeg bruger, hvis du vil tjekke linjen for 'Running:'
Jeg bruger ^ | men det læser kun indtil '|' kun
Hvad jeg har brug for er hele linjen, ikke inklusive 'Running:'


Udgangen jeg får fra koden:


04/12/2017 Wed, 11:44:11.42 
"Operating System:", Microsoft Windows 7   
"Operating System:", Microsoft Windows 2008   
"Operating System:", Microsoft Windows 2008   
"Operating System:", Microsoft Windows XP   
"Operating System:", Microsoft Windows 7   


Tak skal du have.

Bedste reference


Problemet er med


FOR /f "usebackq delims=^|" \%\%a IN ("\%file1\%") DO (


som vil tilkendegive datalinjen baseret på det tilvejebragte afgrænsningssæt.


Linjen fortolkes som


anyofthedelimiters Token1 anyofthedelimiters Token2 anyofthedelimiters Token3 anyofthedelimiters Token4


for så mange tokens som findes på linjen.


Du kan inkludere tokens=1,2,3 i valgmulighederne sammen med delims= klausulen (jeg forud for før delims=) og dette vælger de nominerede tokens og bruger dem til den efterfølgende metavariables, så hvis \%\%a er nomineret som metavariabel, vil tokens=1,2,3 tildele token1 til \%\%a, token2 til \%\%b og token3 til \%\%c. De valgte token-numre behøver ikke at være sekventielle, så tokens=1,3 ville tildele token1 til \%\%a og token3 til \%\%b.


Den særlige token * betyder 'hele resten af ​​linjen, ordentlig efter det højeste nominerede token nummer'


Så vælger tokens=1,* i datalinjen resten af ​​linjen efter | til \%\%b.