windows - Returner en værdi fra batch-filer (.bat-fil) til en tekstfil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en .bat-fil vist nedenfor


@echo off 
for /f "delims=" \%\%a in ('C:MyProjSourcesSearchString.vbs') do (
set ScriptOut=\%\%a)
#echo Script Result = \%ScriptOut\%
echo \%ScriptOut\% >C:ThreePartitionSourcesmyfile.txt


Jeg vil have min output variabel, som er ScriptOut, der skal gemmes i en tekstfil.
Kan nogen foreslå nogen metode, der skal tilføjes til min eksisterende batchfil.


Tak
Maddy

Bedste reference


Forstår jeg korrekt, at din fil bliver overskrevet, og du vil have den vedhæftet? Hvis ja, prøv det her:


echo \%ScriptOut\% >> C:ThreePartitionSourcesmyfile.txt


(Bemærk den dobbelte '>>')

Andre referencer 1


Den for løkke, du har, udfører det script og kører for hver linje, som scriptet vender tilbage. Dybest set betyder det, at din miljøvariabel \%ScriptOut\% kun indeholder sidste -linjen for outputen (da den overskrives hver gang sløjfen behandler en anden linje). Så hvis dit script vender tilbage


a
b
c


så vil \%ScriptOut\% kun indeholde c. Hvis den sidste linje er tom eller kun indeholder mellemrum, vil det effektivt slette \%ScriptOut\%, hvorfor når du gør en


echo \%ScriptOut\%


du får kun ECHO is on. siden efter variabel substition alt det der er tilbage der er echo. Du kan bruge


echo.\% ScriptOut\%


I så fald får du en tom linje (hvilket ville være hvad \%ScriptOut\% indeholder på det tidspunkt.


Hvis du vil udskrive hver linje, går scriptet tilbage til en fil, så du kan gøre det meget lettere ved blot at gøre en


cscript C:MyProjSourcesSearchString.vbs > C:ThreePartitionSourcesmyfile.txt


eller brug >> til omdirigering, hvis du vil have udgangen tilføjet til filen, som Stanislav Kniazev påpegede.


Hvis du bare vil gemme den sidste ikke-tomme -linje, kan følgende fungere:


for /f "delims=" \%\%a in ('C:MyProjSourcesSearchString.vbs') do (
  if not "\%\%a"=="" set ScriptOut=\%\%a
)


som kun sætter \%ScriptOut\%, hvis loopvariablen ikke er tom.