budders
Goto Top

ChangeLog Batch

Gute Morgen ihr Administratoren :b

Wie immer erstmal der Disclaimer, ich bin nur ein Batch Laie face-smile

Ich wollte ein Batch schreiben, dass als Art ChangeLog Erfassung dient.
Der Gedanke dahinter ist, dass jeder der in der Abteilung nachdem er eine Änderung im System vorgenommen hat 1x den Batch aufruft und die getätigten Änderungen einträgt.
Geplant ist dann, das ganze mit Excel einzulesen und es ein wenig übersichtlicher zu Strukturieren, das ist jedoch noch nicht ausgearbeitet.

Jedoch funktioniert das ganze nicht so wirklich ^^
Könntet ihr mal drüber gucken?
hier mal mein Code

 
@echo off
chcp 2500>nul
title ChangeLog
:start
G:
cd Change
if exist log.tmp del log.tmp
cls
echo Änderungen im Editor eintragen und speichern, mit beliebiger Taste hier bestätigen.
echo Hier bitte die vorgenommenen Änderungen eintragen, danach speichern (Strg+S) und in die Konsole wechseln:>log.tmp
start notepad.exe log.tmp
pause>nul
for /f %%i in (log.tmp) do (
	echo %%i|findstr"Hier  bitte">nul && call :delin  
	set chg=%%i
 	echo %chg%>ChangeLog.txt
)

exit

::delin
set /p chg=%chg:~104,9999999%
exit /b

wie immer bin ich mir sicher, dass es bestimmt 100 besser Möglichkeiten gibt dies zu realisieren, insbesondere mit anderen Programmiersprachen aber ich mag die Herrausforderung es in Batch zu versuchen.

MfG Budders/Gerrit

[Edit] Dateiendungen korrigiert

Content-ID: 215531

Url: https://administrator.de/contentid/215531

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Snowman25
Snowman25 29.08.2013 um 11:21:11 Uhr
Goto Top
Hallo @Budders,

Raffiniert, das über Notepad zu lösen.
Allerdings würde ich das so lösen:
Echo. >> log.txt
start /WAIT notepad.exe log.txt
Dann kannst du dir auch das pause>nul sparen, weil die Batch weitergeht, sobald der notepad-Prozess geschlossen wird.

Was funktioniert denn genau nicht?

Gruß,
@Snowman25
Budders
Budders 29.08.2013 aktualisiert um 11:31:17 Uhr
Goto Top
Danke für den Tip mit dem /WAIT , kannte ich garnicht face-smile hatte das erst mit einem taskkill gelöst aber das kam mir etwas user unfreundlich vor, fals User dann noch n anderen notepad task offen hat.

Was genau nicht funktioniert weiss ich selbst nicht so wirklich :S der Batch beendet sich halt, ich vermute mal auf irgendetwas mit der "for" schleife.

Das mit dem Echo. wäre auch ne idee aber ich würde jetzt gerade die for schleife gerne behalten :P

btw. ich hatte im Code den ich oben gepostet habe n paar kleinere Fehler drin. Manchmal ist es log.tmp und manchmal log.txt, ist jetzt editiert

MfG Gerrit/Budders
Snowman25
Snowman25 29.08.2013 um 11:39:53 Uhr
Goto Top
Dein Problem ist in Zeile 15.
Du suchst nach "Hier Bitte" mit doppeltem Leerzeichen, gibst aber nur ein einfaches in die Datei.
Budders
Budders 29.08.2013 um 11:45:35 Uhr
Goto Top
Das scheint nur hier im Post so zu sein, im Code ist da nur ein Leerzeichen... hier nochmal der aktuelle Code

@echo off
color 0a
title ChangeLog
:start
G:
cd Plehn
if exist log.tmp del log.tmp
cls
echo Aenderungen im Editor einteragen und speichern, mit beliebiger Taste hier bestaetigen.
echo Hier bitte die vorgenommenen Änderungen eintragen, danach speichern (Strg+S) und in die Konsole wechseln:>log.tmp
start /WAIT notepad.exe log.tmp
for /f %%i in (log.tmp) do (
	echo %%i|findstr "Hier bitte">nul && call :delin  
	set chg=%%i
	echo %chg%>ChangeLog.txt
)

exit

::delin
set /p chg=%chg:~104,9999999%
exit /b

Meinst du das Script sollte ansonsten so funktionieren?

MfG Budders/Gerrit
Budders
Budders 29.08.2013 um 11:52:50 Uhr
Goto Top
Nein es dürfte auch so nicht funktionieren. :D
Selbsterkenntnis gerade
1.
 set /p chg=%chg:~104,9999999% 
parameter /p stimmt nicht. einfach ohne parameter sollte funktionieren.
2.
 
echo %%i|findstr "Hier bitte">nul && call :delin  
set chg=%%i
zusammen mit ::delin

egal was in ::delin in %chg% geschrieben wird, es wird sowieso in zeile 14 wieder überschrieben.
____

soviel dazu :D aber wie ich 2. beheben kann, weiss ich jetzt gerade selbst nicht :S

MfG Gerrit/Budders
Budders
Budders 29.08.2013 um 12:26:25 Uhr
Goto Top
G:\Change>for /F %i in (log.tmp) do (
echo %i  | findstr "Hier bitte"  1>nul  && call :delin  
 set chg=%i
 if "" == "%i" echo  1>ChangeLog.txt  
)

G:\Change>(
echo Hier  | findstr "Hier bitte"  1>nul  && call :delin  
 set chg=Hier
 if "" == "Hier" echo  1>ChangeLog.txt  
)

G:\Change>set chg=%i

G:\Change>set chg=

G:\Change>echo   1>>ChangeLog.txt

G:\Change>exit /b

G:\Change>(
echo 222  | findstr "Hier bitte"  1>nul  && call :delin  
 set chg=222
 if "" == "222" echo  1>ChangeLog.txt  
)

G:\Change>(
echo 333  | findstr "Hier bitte"  1>nul  && call :delin  
 set chg=333
 if "" == "333" echo  1>ChangeLog.txt  
)

G:\Change>pause

Das ist der Output von diesem Code... Mir fällt nichts mehr ein...

for /f %%i in (log.tmp) do (
	echo %%i|findstr "Hier bitte">nul && call :delin  
	set chg=%%i
	if "%chg%"=="%%i" echo %chg%>ChangeLog.txt  
)
pause
exit

:delin
set chg=%%i
set chg=%chg:~104,9999999% 
echo %chg%>>ChangeLog.txt
exit /b

output in der ChangeLog.txt
Echo ist angeschaltet.(on)
Endoro
Endoro 29.08.2013 aktualisiert um 12:51:16 Uhr
Goto Top
Hallo,
ein Vorschlag:
:delin
FOR %%a IN (c) DO set "chg=%%i"  
set "chg=%chg:~104,8191%"   
echo %chg%>>ChangeLog.txt
exit /b
Im übrigen ist mir rätselhaft, wo du hinwillst mit dem Code ...


[OT]
Und die FAQ mit dem HTML Code ist auch weg face-sad keine Smilies mehr --> M!st
[/OT]
lg.

PS: dieser if Befehl in Zeile 4 wird nie true sein, weil du dort delayed expansion einsetzen musst.
Snowman25
Snowman25 29.08.2013 um 12:48:54 Uhr
Goto Top
So. bin aus der Mittagspause zurück.

Hast du dir mal for /? durchgelesen?
Deine Schleife muss so aussehen:
for /f "delims=" %%i in (log.tmp) do (  
Dann wird auch die ganze Zeile in die Variable eingespeist und nicht nur das erste Wort.

Gruß,
@Snowman25
Budders
Budders 29.08.2013 um 12:49:14 Uhr
Goto Top
ich hab die vermutung, dass ich das nicht hin bekomme ...
Projekt wird also eingestampft.
Danke für eure Vorschläge aber naja... wird sich im endeffekt wahrscheinlich eh nicht lohnen
pieh-ejdsch
pieh-ejdsch 29.08.2013 um 19:52:12 Uhr
Goto Top
moin Budders,

Den changelog mit Notepad zu erstellen finde ich Super, da dieser ja auch zu 98% von den Nutzern in Notepad gelesen wird.

Anstatt die Zeile mit den Schreiben und Speichern in Notepad erst anzuzeigen, und danach zu löschen die Frage: Ist die Zeile vollständig vorhanden oder nur Teilweise, da der Cursor zuerst am Anfang der Datei steht.

Vorschlag: Leere Datei erzeugen (Dateiname -> "changes eintragen, speichern und schliessen.txt")
- erzeuge eine Verzögerte Meldung Batch; vbs-Messagebox ist hier alles zu finden
- Öffne dann Notepad Dateiname
- Die Message legt sich über Notepad
- Kopiere die fertige changelog mit Datum ins Archiv

Gruß Phil
Budders
Budders 30.08.2013 um 08:07:33 Uhr
Goto Top
Danke dir Pieh-ejdsch , sehr schöne Vorschläge face-smile
Sollte ich den Auftrag explizit auf bekomme, werde ich das ganze Definitiv so lösen

MfG Budders