Har en ganska omfattande bat fil som jag kör i Oracle Virtual Box (Windows 10 Enterprise)
Låt oss kalla scriptet "Execution.bat", för den heter faktiskt så.
Jag har inte programmerat "Execution.bat" och jag får inte ändra den alls.
Hursom den kör fint utan errors. Nackdelen är att den är kodat med en del stopps (15) där usern ska ge Y/N beroende på olika scenarion. Jo, det skulle kunna automatiseras, men det är inte aktuellt idag.
Scriptet ger en omfattande output till terminalen som går förlorad efter exekvering.
Jag vill (måste) fortsätta att köra scriptet as is, & samtidigt vill kunna logga scriptets output i en logg fil.
Dvs:
1) Köra scriptet som idag (kör fint, inga problem, nackdel: output går förlorad)
2) Samtidigt som 1) kör som idag spara all output i en logg fil.
Jag har byggt en överordnad bat script som checkar konsistensen i miljön, att alla nödvändiga input filer och mappar är på plats m.m., och det scriptet skulle kunna anropa "Execution.bat". Det överordnade scriptet loggar allt i logg filer med timestamp m.m. Problemet är hur jag hanterar alla stopp hos "Execution.bat" där användaren manuellt ska ange J/N.
Finns det något sätt att åstadkomma denna logging parallelt med körning i prompten?
Har en ganska omfattande bat fil som jag kör i Oracle Virtual Box (Windows 10 Enterprise)
Låt oss kalla scriptet "Execution.bat", för den heter faktiskt så.
Jag har inte programmerat "Execution.bat" och jag får inte ändra den alls.
Hursom den kör fint utan errors. Nackdelen är att den är kodat med en del stopps (15) där usern ska ge Y/N beroende på olika scenarion. Jo, det skulle kunna automatiseras, men det är inte aktuellt idag.
Scriptet ger en omfattande output till terminalen som går förlorad efter exekvering.
Jag vill (måste) fortsätta att köra scriptet as is, & samtidigt vill kunna logga scriptets output i en logg fil.
Dvs:
1) Köra scriptet som idag (kör fint, inga problem, nackdel: output går förlorad)
2) Samtidigt som 1) kör som idag spara all output i en logg fil.
Jag har byggt en överordnad bat script som checkar konsistensen i miljön, att alla nödvändiga input filer och mappar är på plats m.m., och det scriptet skulle kunna anropa "Execution.bat". Det överordnade scriptet loggar allt i logg filer med timestamp m.m. Problemet är hur jag hanterar alla stopp hos "Execution.bat" där användaren manuellt ska ange J/N.
Finns det något sätt att åstadkomma denna logging parallelt med körning i prompten?
Kolla upp kommandot tee (att splitta output från kommando till två strömmar)
Finns åtminstone (förutom i *nix) i Powershell (vet ej om finns i cmd)
__________________
Senast redigerad av Enterprise 2024-02-03 kl. 21:06.
Har en ganska omfattande bat fil som jag kör i Oracle Virtual Box (Windows 10 Enterprise)
Låt oss kalla scriptet "Execution.bat", för den heter faktiskt så.
Jag har inte programmerat "Execution.bat" och jag får inte ändra den alls.
Hursom den kör fint utan errors. Nackdelen är att den är kodat med en del stopps (15) där usern ska ge Y/N beroende på olika scenarion. Jo, det skulle kunna automatiseras, men det är inte aktuellt idag.
Scriptet ger en omfattande output till terminalen som går förlorad efter exekvering.
Jag vill (måste) fortsätta att köra scriptet as is, & samtidigt vill kunna logga scriptets output i en logg fil.
Dvs:
1) Köra scriptet som idag (kör fint, inga problem, nackdel: output går förlorad)
2) Samtidigt som 1) kör som idag spara all output i en logg fil.
Jag har byggt en överordnad bat script som checkar konsistensen i miljön, att alla nödvändiga input filer och mappar är på plats m.m., och det scriptet skulle kunna anropa "Execution.bat". Det överordnade scriptet loggar allt i logg filer med timestamp m.m. Problemet är hur jag hanterar alla stopp hos "Execution.bat" där användaren manuellt ska ange J/N.
Finns det något sätt att åstadkomma denna logging parallelt med körning i prompten?
Möjligt att jag missförstod men jag tolkade som att TS vill ha output både i terminalen och i logfil. Med > så blir väl all output enbart styrt till filen?
Möjligt att jag missförstod men jag tolkade som att TS vill ha output både i terminalen och i logfil. Med > så blir väl all output enbart styrt till filen?
Stämmer.
Kanske JAG som misstolkade vad man ville ha.
En vanlig metod för att logga output från ett batch-script till en fil är att använda omdirigering i cmd. Du kan omdirigera output till en fil med > för att skriva över filen eller >> för att lägga till i filen, men detta löser inte problemet med de manuella stoppen där scriptet väntar på input från användaren.
Galet att använda ">" . Det skriver ju över precis vad som helst vid felaktig hantering. Använd omdirigering för att logga output. 2>&1
Kod:
@echo off
set logFile=ExecutionLog_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.txt
(type answers.txt | call Execution.bat) > "%logFile%" 2>&1
Detta kräver dock att Execution.bat inte kommer att hamna i någon situation där svaren inte är förutsägbara. För att lösa detta kan du använda echo Y och echo N.
Har provat flera alternativ, Powershell, perl i cmd, etc och issuen verkar vara att bat filen förväntar input på riktigt många ställen och där går bat filen i stå:
Kod:
set /p system="Insert system (f.ex. u23, p20, p01): "
echo Executing in system: %system%
Både med Powershell (Tee-Object) och perl i cmd, så bat scriptet hänger där.
Utan 'set /p' fungerar det fint. Men inte med.
Igen:
1) bat filen får inte editeras eller ändras och den kör utan problem.
2) Jag önskar köra bat filen som idag, interagera med bat filen på skärmen, och helt enkelt fånga det som skrivs på skärmen till en logfil.
Detta kräver dock att Execution.bat inte kommer att hamna i någon situation där svaren inte är förutsägbara. För att lösa detta kan du använda echo Y och echo N.
Varför inte använda Powershell TS?
Funkar tyvärr inte då svaren varierar hela tiden och är inte förutsägbara.
Har provat flera alternativ, Powershell, perl i cmd, etc och issuen verkar vara att bat filen förväntar input på riktigt många ställen och där går bat filen i stå:
Kod:
set /p system="Insert system (f.ex. u23, p20, p01): "
echo Executing in system: %system%
Både med Powershell (Tee-Object) och perl i cmd, så bat scriptet hänger där.
Utan 'set /p' fungerar det fint. Men inte med.
Igen:
1) bat filen får inte editeras eller ändras och den kör utan problem.
2) Jag önskar köra bat filen som idag, interagera med bat filen på skärmen, och helt enkelt fånga det som skrivs på skärmen till en logfil.
Vad säger panelen?
Detta fungerar för mig i Powershell:
input.bat
Kod:
@echo off
echo Batch Script to take input.
set /p input= Type any input
echo Input is: %input%
pause
Kör detta i Powershell:
Kod:
.\input.bat | tee output.txt
cat output.txt
Kod:
Batch Script to take input.
Type any inputInput is: funkar
Press any key to continue . . .
Notera att enbart output fångas upp av tee, inte det som man skriver in.
Jag får inte helt det att funka i Powershell (Windows 10 Enterprise) för 2 kommandon:
pause
choice
verkar inte fungera på PS. Google säger att 'pause' ska ändras till - cmd /c 'pause - men det fungerar inte iaf. scriptet stannar strax innan och hänger. Framför allt på 'choice' ska man ange J/N men det visas inte. Då jag viste att jag skulle svara J svarade jag i blindo och programmet fortsatte.
Jag får inte helt det att funka i Powershell (Windows 10 Enterprise) för 2 kommandon:
pause
choice
verkar inte fungera på PS. Google säger att 'pause' ska ändras till - cmd /c 'pause - men det fungerar inte iaf. scriptet stannar strax innan och hänger. Framför allt på 'choice' ska man ange J/N men det visas inte. Då jag viste att jag skulle svara J svarade jag i blindo och programmet fortsatte.
Men det duger inte. Jag kan inte ändra i programmet.
Har förstått att det går att lösa det med Perl på cmd kommando prompten.
Jobbar med det just nu, programmet kör bättre på cmd.
Tacksam för alla idéer :-)
Provade du att köra mitt exempel-BAT-skript som innehåller just "pause" i Powershell? Du kör alltså BAT-filen inne i Powershell-prompten och "pipar" output till tee
Det fungerade på min dator (sitter just nu på Win 10 Business). Alltså utskriften syntes på skärmen OCH sparades till outputfilen OCH pause fungerade som förväntat.
Varför kan du inte ändra i BAT-filen förresten?
__________________
Senast redigerad av Enterprise 2024-02-07 kl. 15:24.
Provade du att köra mitt exempel-BAT-skript som innehåller just "pause" i Powershell? Du kör alltså BAT-filen inne i Powershell-prompten och "pipar" output till tee
Det fungerade på min dator (sitter just nu på Win 10 Business). Alltså utskriften syntes på skärmen OCH sparades till outputfilen OCH pause fungerade som förväntat.
Varför kan du inte ändra i BAT-filen förresten?
Ja, har provat med pause i Powershell som är exakt det jag har i scriptet. Vet inte om vi kör olika
versioner. Jag kör Windows 10 Enterprise.
cmd:
OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.19045 N/A Build 19045
Powershell version:
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 3930
pause command. Suspends processing of a batch program and displays the message
Press any key to continue . . .
När jag kör i Powershell står scriptet och hänger vid 'pause' och visar ingenting, det är lite förvirrande, jag känner scriptet och i vissa lägen vet vad jag ska svara men det är ohållbart.
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!
Stöd Flashback
Swish: 123 536 99 96Bankgiro: 211-4106
Stöd Flashback
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!