hvis erklæring - Windows Batch-Script - Forsøger at gemme variabel til tekstfil og derefter indlæse den i en variabel ved genstart

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne gøre noget nok ganske nemt.


Jeg forsøger at tillade brugere af et Windows-batch-script at indstille baggrundsfarven og gemme den i en txt-fil, som derefter indlæses i en variabel, hver gang de kører scriptet.


Indtil videre har jeg:


sæt/p ColourOpt=<\% LogPath\% \\% Brugernavn\% \_Options.Colour.log


Hvilket indlæser indholdet af .log-filen i ColourOpt-variablen (\% brugernavn\% og\% logpath\% er allerede defineret og fungerer fint).


Så bruger jeg følgende kode til at anvende indstillingen:


If /I '\%Colouropt\%'=='0f' Color 0f
If /I '\%Colouropt\%'=='08' Color 08
If /I '\%Colouropt\%'=='0c' Color 0c
If /I '\%Colouropt\%'=='0d' Color 0d
If /I '\%Colouropt\%'=='0e' Color 0e
If /I '\%Colouropt\%'=='0a' Color 0a
If /I '\%Colouropt\%'=='1a' Color 1a
If /I '\%Colouropt\%'=='1c' Color 1c
If /I '\%Colouropt\%'=='1e' Color 1e
If /I '\%Colouropt\%'=='1f' Color 1f


Dette virker også fint, og farven er indstillet uden problem.


Nu er problemet, når jeg bruger scriptet til at udgive brugerens farveindstilling til .log-filen, tilføjer det mellemrum, som nu får scriptet til at lukke i stedet for at anvende ændringen.


Koden bruges til at skrive til .log-filen:


IF /I '\%Options\%'=='1' Echo 0f>\%LogPath\%\%UserName\%\_Options.Colour.log & Set ColourOpt=0f & Color 0f


Dette vil gemme indstillingen til .log-filen og indstille farven med det samme, så vel som at indstille den i variablen.


Dette udsender dog tekstfilen med et mellemrum efter '0f' og en tom linje under den.


Er der en måde at output uden mellemrummet, eller lad kommandoen if at ignorere mellemrum?


Enhver hjælp ville blive meget afskediget!


Tak!

Bedste reference


Hvorfor forsøger du at gøre det som en enkelt operation? Windows har haft flere linjer if blokke i aldre:


IF /I '\%Options\%'=='1' (
    Echo 0f>\%LogPath\%\%UserName\%\_Options.Colour.log
    Set ColourOpt=0f
    Color 0f
)


Det er faktisk pladsen forud for den første &, der udføres til filen, du kan lige så godt rette det med:


IF /I '\%Options\%'=='1' Echo 0f>\%blah\%\_Options.Colour.log& Set ColourOpt=...


(ingen plads deri).


Hvis du ikke vil have linjens slutninger (dvs. hvis du vil have din fil til at bestå af only 0f), så ved du allerede halvdelen af ​​tricket:


<nul set /p junk=0f>xyz.txt& echo hello


Dette vil oprette en fil xyz.txt med kun de to tegn - ingen ekstra plads og ingen linje slutter bagefter.


Se dette svar for mere information og alle de andre svar, herunder nogle flere af mine, for nogle pæne tricks.