daffman
Goto Top

Umrandung in einer Batchdatei schließen, auch beim Befel set

hello @ all!
ich habe mir ein kleines programm geschrieben um meine musik datein leichter zu finden und abzuspielen, jetzt wollte ich die oberfläche verbessern, doch ich habe ein kleines problem.

hey also mein problem schaut so aus:

ich habe also mir einmal so eine schöne oberflöche gestalltet, das sieht so aus:
a36e920449525df83acd4aa2672c669b

wenn ich jetzt etwas eingebe verändert es sich so:
4347d46e97b89f3f900970fc8aa798fa

meine frage ist jetzt, wie bekomme ich auch rechts so eine umrandung hin?

ich danke jetzt schon für antworten face-smile


MFG alexander

PS: wenn das gelöst ist, habe ich schon eine weitere aufgabe :P

Content-Key: 146759

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

Printed on: April 19, 2024 at 00:04 o'clock

Mitglied: 60730
60730 Jul 12, 2010 at 21:20:17 (UTC)
Goto Top
moin,

oberflächlich gesehen - schreibt man schöne gui nicht in Batch, da eignen sich andere werkzeuge besser.

  • autoit
  • gtk
  • vbs
  • xyz

Gruß

PS:
PS: wenn das gelöst ist, habe ich schon eine weitere aufgabe :P
Ist das eine Drohung, oder ein Versprechen?

btw: Tipps die zur Fehleranalyse oder Erweiterung selbst gezimmerter Tools dienen, immer am besten mit dem Teil des Tools posten, um das es geht. Und Ross & Reiter gilt eigentlich auch für dein Problem, sonst nehmen wir an, du hast Dos 6.22. oder W98se face-wink

23:20 Daffman ist schon wieder weg, die Frisur sitzt, ein Bier braucht auch 7 minuten und nicht 4
Member: Daffman
Daffman Jul 12, 2010 at 21:33:16 (UTC)
Goto Top
ich weiß, dass DOS jetzt nicht grad das beste ist, aber ich liebe es einfach :P

zur sicherheit: ich habe XP und das ist die Eingabeaufforderung!

es sollte eher hilferuf sein und keine drohung face-smile ich dachte nur, ob jemand wüsste, wie ich einen "find" befehl auch so einkasteln könnte.

MFG Alexander
Mitglied: 60730
60730 Jul 12, 2010 at 21:47:25 (UTC)
Goto Top
Zitat von @Daffman:
ich weiß, dass DOS jetzt nicht grad das beste ist, aber ich liebe es einfach :P

ok, das ist kein Dos, ich liebe meine Frau und mein Kind, Scripte naja die mag ich

zur sicherheit: ich habe XP und das ist die Eingabeaufforderung!

es sollte eher hilferuf sein und keine drohung face-smile ich dachte nur, ob jemand wüsste, wie ich einen "find" befehl
auch so einkasteln könnte.

Also mit Find würde ich da nix rumstricken und ehrlich das wird nix - such dir die drei von mir genannten genausofreien Lösungen mal an, die sind schön. Das schöne an batch und co ist - das man es im hintergrund machen kann.

MFG Alexander
zurück

Ps: evtl hast du meinen Text nicht ganz gelesen und dir damit die Chance genommen, jetzt ein kleines Scriptchen in irgendeiner "Sprache " für dein Problemchen zu kriegen, von dem ich dir garantiere, dass es schneller und schöner aussieht, als es ein Batch jemals kann - denn dafür ist Batch nicht gemacht.

23:45 Das Wetter passt und Duffman sitzt neben Homer bei Moe, bei den Admins ist er wieder weg. Q&D
Mitglied: 77559
77559 Jul 13, 2010 at 07:13:02 (UTC)
Goto Top
Zitat von @60730:
oberflächlich gesehen - schreibt man schöne gui nicht in Batch, da eignen sich andere werkzeuge besser.

Moin Timo,
aber Schönheit liegt doch im Auge des Betrachters face-wink

Und auch Batche kann man mit HOrst Schaeffers Wbat schön(er) machen.
(läuft aber als 16-bit Anwendung nicht auf 64-Bit Windows-Versionen)

Ansonsten halte ich vom Kästchen(-Denken) des OP überhaupt nichts face-wink

Gruß
LotPings
Member: rubberman
rubberman Jul 13, 2010 at 11:21:02 (UTC)
Goto Top
Hallo Alexander,

muss meinen Vorrednern schon Recht geben. Und wenn du deinen Quellcode gepostet hättest, würdest du uns die Beantwortung deiner Frage auch etwas erleichtern.
Aber zu deinem Problemchen:
Wenn du mittels nativem Batch die Lücke schließen willst, hast du keine andere Chance, als die Anzeige zu löschen und neu zu schreiben. Dabei musst du deine Eingabe zu einem String mit fixer Länge verarbeiten (macht in meinem Beispiel die Funktion :addspaces).
Guckst du hier
@echo off &setlocal &mode con cols=70 lines=100 &title Musik finden

call :top
set /p "input= º "  

call :addspaces "%input%" 65 r output  
set "output= º %output%º"  

cls
call :top
echo %output%
call :bottom
pause
goto :eof

:: ~~~~~~~~~~~ Subroutinen: ~~~~~~~~~~~

:top
echo.
echo  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo  º                                                                  º
echo  º               Musiktitel oder Interpreten eingeben               º
echo  º                                                                  º
goto :eof

:bottom
echo  º                                                                  º
echo  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
goto :eof

:addspaces
:: syntax:
:: addspaces String AnzahlZeichen Richtung[r/l] Variablenname
setlocal
for /l %%i in (1,1,%~2) do (
  call set "spaces= %%spaces%%"  
)
if /i "%~3"=="r" (  
  set "string=%~1%spaces%"  
  call set "string=%%string:~,%~2%%  
) else (
  set "string=%spaces%%~1"  
  call set "string=%%string:~-%~2%%  
)
endlocal&set "%~4=%string%"  
goto :eof

Grüße
rubberman
Member: Daffman
Daffman Jul 13, 2010 at 12:58:02 (UTC)
Goto Top
hey!

ja ich hab es versucht, habe den quelltext kopiert, aber das eingefügte war ein wirrwarr sondergleichen!

ich habe deins jetzt verwendet und was ich bekomme, nähert sich schon meinem gesuchten an, aber ist noch nicht ganz das richtige, denn es entstehen immer leere zeilen.
das heißt, oben ist die waagrechte linie, die zeiel darunter ist leer und die nächste hat dann erst die striche links und rechts und bei der eingabe ist der rechte strich immer ein zeichen zu weit rechts face-smile

trotzdem vielen vielen dank!

MFG alex
Member: rubberman
rubberman Jul 13, 2010 at 13:03:57 (UTC)
Goto Top
Hallo,
das liegt wohl an der Breitenbegrenzung (bei mir funktioniert das so, aber bei dir könnte die Anzeige etwas anders sein).
Ändere mal in der ersten Zeile cols=75.

Grüße
rubberman
Member: Daffman
Daffman Jul 13, 2010 at 13:26:55 (UTC)
Goto Top
ich habs auf cosl=71 gestellt, dann passts, aber der strich bei der eingabe ist noch immer weiter rechts!

lg alex
Member: Biber
Biber Jul 13, 2010 at 13:45:10 (UTC)
Goto Top
Moin Daffman,

Das liegt daran, dass die in der ersten Zeile gesetzte Zeilenanzahl (cols=71 oder cols=75 oder whatever) natürlich ihre Abhängigkeiten weiter unten im Programmfluss hat.

  • Entweder du setzt die EINMAL als Wert und setzt alle sich daraus ergebenden Werte "berechnend"
  • oder du musst eben, wenn du "mode con cols" um 5 verminderst auch den Parameter "Spaltenbreite" in diesem ":Addspaces"-Block um 5 vermindern.

Steht doch da.. face-wink

Grüße
Biber
Member: rubberman
rubberman Jul 13, 2010 at 14:46:38 (UTC)
Goto Top
@ Biber.
Das kann nicht die Ursache sein, denn die Spaltenanzahl wurde ja von 70 auf 71/75 erweitert (und nicht verringert!).
Wäre sie verringert worden, würde der Zeilenumbruch in der Anzeige in die nächste Zeile rutschen. Die Erscheinung ist aber dass "der Strich zu weit rechts" steht

@ Alex
Welcher Strich ist zu weit rechts? Der rechte oder der linke? Und wann, bei der Eingabe oder danach?

Wenn es der rechte ist, dann musst du beim Aufruf von :addspaces die 65 um die entsprechende Anzahl vermindern.
Wenn es der linke ist, hast du ein Space zu viel bei set /p "input=..." oder set "output=...".

Grüße
rubberman
Member: Daffman
Daffman Jul 21, 2010 at 15:22:49 (UTC)
Goto Top
hello! face-smile

sry dass ich erst jetzt schreibe, war in koebenhavn!

also das mit dem strich habe ich selbst lösen können, langsam verstehe ich es :P

meine frage, die ich schon ganz oben angekündigt - und kurz besprohen - habe, ist die, ob ich auch einen find' befehl so einkasteln kann.

ih hoffe, ich quäle - langweile - euch nicht, aber mir ist noch eine unklarheit in die hände gefallen. der quellcode ist der folgende:
@echo off
set num=0
set z=88
:LOOP
if %num%==%z% GOTO :PASST
set /a num=%num%+1
for /l %%i in (%num%, 1, %num%) do (
call echo %%m%%i%%>>1.tmp
set /p x1= <1.tmp
del *.tmp
GOTO :OUT
)
:OUT
set /a noch=%z%-%num%
echo.
if %noch% LSS 100 set ab= 
if %noch% LSS 10 set noch=0%noch%
set /a sec=%noch%*20
if "%sec:~0,-2%" LSS "10" (set sec=0%sec:~0,-2%) ELSE (set sec=%sec:~0,-2%)  
echo %sec%
GOTO :LOOP
:PASST
hierbei will ich, dass die datei eben die zahlen runterzählt, die eine sekunden angabe sein sollen. doch wenn set /a sec=%noch%*20 180 bzw 160 ergibt, bricht die datei ab. danach geht es wieder. woran kann das liegen??


vielen dank für die geduld

lg alex
Member: Biber
Biber Jul 21, 2010 at 15:31:50 (UTC)
Goto Top
[OT]
Zitat von @Daffman:
sry dass ich erst jetzt schreibe, war in koebenhavn!

also das mit dem strich habe ich selbst lösen können, langsam verstehe ich es :P
Auf welchem Strich in koebenhavn warst du denn?

SCRN

Lösch ich nachher wieder....
Biber
[Edit]
brauchst du nicht löschen - ist nur ein zeugnis deiner infantilität
Erwischt... woher weiss er bloss von meiner Vorliebe für Minderjährige..??

[/OT]
Member: Daffman
Daffman Jul 21, 2010 at 17:41:57 (UTC)
Goto Top
brauchst du nicht löschen - ist nur ein zeugnis deiner infantilität
- ende des kommentars...
Mitglied: 60730
60730 Jul 21, 2010 at 18:27:06 (UTC)
Goto Top
Zitat von @Daffman:
hierbei will ich, dass die datei eben die zahlen runterzählt, die eine sekunden angabe sein sollen. doch wenn set /a
sec=%noch%*20
180 bzw 160 ergibt, bricht die datei ab. danach geht es wieder. woran kann das liegen??

Moin,

naja - meine Vorliebe für Problembatche - die ein führendes @echo off haben - wird wohl mal auf meinem Grabstein stehen....
Nun ist die Axt aus dem Binärwald die - @echo off in Testscripte hasste - wie die Pest
steif und kalt unter diesem Stein - mögen die Betatestscriptschreiber gnädig sein
Und immer dran denken - er hasste das nicht allein...


2

2

2

2

2

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
0

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
0

01

01

01

0

0

0

0

0
123

Übrigens muß man deinen Umbau schon vorher etwas anpassen...
Warum der Gummiman die Zeilen 38 und ff s0o gestrickt hat und nicht so wie du, könnte dieses Rätsel lösen, das andere siehe oben.

ich hoffe, ich quäle - langweile - euch nicht,
Und ich danke dir für deine Hausaufgabe, die ich dir etwas Licht ins dunkle liefert, soll dir ja nicht langweilig werden und du sollst das ja auch verstehen.

Gruß
Member: Daffman
Daffman Jul 21, 2010 at 18:44:25 (UTC)
Goto Top
Zitat von @60730:

Moin,

naja - meine Vorliebe für Problembatche - die ein führendes @echo off haben - wird wohl mal auf meinem Grabstein
stehen....
Nun ist die Axt aus dem Binärwald die - @echo off in Testscripte hasste - wie die Pest
steif und kalt unter diesem Stein - mögen die Betatestscriptschreiber gnädig sein
Und immer dran denken - er hasste das nicht allein...


dafür entschuldige ich mich inständig -> man kann es auf eine unachtsamkeit zurückführen!! face-smile


Übrigens muß man deinen Umbau schon vorher etwas anpassen...
Warum der Gummiman die Zeilen 38 und ff s0o gestrickt hat und nicht so wie du, könnte dieses Rätsel lösen, das
andere siehe oben.


was für einen umbau? gummiman? ich muss zugeben... daraus werde ich nicht schlau, vl liegt es auch daran, dass ich ein wenig kränkl...

bitte um transkription für dummies

mfg alexander
Member: Daffman
Daffman Jul 21, 2010 at 18:58:20 (UTC)
Goto Top
ok hab das problem schon selbst gelöst.


kennt jetzt noch jemand eine lösung für meine frage mit find?

MFG
Member: Daffman
Daffman Jul 22, 2010 at 16:59:17 (UTC)
Goto Top
danke für eure hilfen, für dieses mal verabrschiede ich mich mit dieser Frage, ich habe selber eine lösung gefunden.

vielen dank trotzdem

mfg alexander
Mitglied: 77559
77559 Jul 22, 2010 at 17:27:00 (UTC)
Goto Top
Das ist ja nett,

alle Leute die bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden,
dürfen sich/dich dann Fragen was für eine Lösung das ist ?

Findest du das, nachdem sich doch einige Leute Mühe gegeben haben dir zu helfen,
nicht ein wenig Egozentrisch?

Gruß
LotPings

@Biber, vielleicht ja auch nur Egoistisch - Egomanie scheint nicht zu passen face-wink
Member: Biber
Biber Jul 22, 2010 at 19:29:46 (UTC)
Goto Top
Moin LotPings,

Zitat von @77559:
Das ist ja nett,

alle Leute die bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden,
dürfen sich/dich dann Fragen was für eine Lösung das ist ?
Mach dir keine Sorgen.
Wenn das das Schlusswort Daffmans gewesen sein sollte bis zum Wochenende...
dann werden keine Leute bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden, versprochen.

Findest du das, nachdem sich doch einige Leute Mühe gegeben haben dir zu helfen,
nicht ein wenig Egozentrisch?
Ich muss jetzt los nach Wikipedia ... mal nachschlagen, was "egozentrisch" heisst...
Ich hab da so einen Verdacht, weil auch ich ein passendes Wort für so ein Verhalten gesucht habe.
... mal sehen, ob wir die gleiche Verhaltensauffälligkeit meinten.

Grüße
Biber
Member: Daffman
Daffman Jul 22, 2010 at 20:41:20 (UTC)
Goto Top
Hier ist der gesuchte Code um die find ausgabe einzuramhmen mit ascii (dos erweiterung) zeichen.

mode con cols=80 lines=75 
find /i "%pre%" "blabla".txt>>"blabla1".txt  
)
FOR /F "delims=: tokens=2*" %%f IN ('findstr /n . "blabla1.txt"') DO echo %%f>>blabla2.txt  
for /f "tokens=1,2* delims=:" %%a in ('findstr /n . "blabla2.txt"') do (  
set z1=%%a
set p%%a=%%b
)
del *.txt

echo  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo  º                                                                            º
set num=0
:L
if %num%==%z1% GOTO :OK
set /a num=%num%+1
for /l %%i in (%num%, 1, %num%) do (
call echo %%p%%i%%>>1.tmp
set /p x1= <1.tmp
del *.tmp
GOTO :O
)
:O
set zeile=%x1%
call :len CharCount "%Zeile%"  
goto :OP
:len RetVal(byRef) Value(Byval)
setlocal
set cnt=0
set "chk=%~2"  
:len_loop
if not "%chk%"=="" Set /A cnt+=1 & set "chk=%chk:~1%" & goto :len_loop  
endlocal&set /A "%1=%cnt%"&goto :eof  
:OP
set le= 
set /a abs=73-%CharCount%
set num0=0
:KREIS
if %num0%==%abs% GOTO :OLE
set /a num0=%num0%+1
set le=%le% 
GOTO :KREIS
:OLE
echo º %x1%%le% º
GOTO :L
:OK
echo  º                                                                            º
echo  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

ich hoffe, ich konnte deine ängste, mit einem egoistischen menschen geschrieben zu haben, beseitigen.

Zitat von @Biber:
Mach dir keine Sorgen.
Wenn das das Schlusswort Daffmans gewesen sein sollte bis zum Wochenende...
dann werden keine Leute bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden, versprochen.

gibst du bei Google umrandung mit DOS ein, kommst du zu diesem beitrag - überzeug dich selbst: GOOGLE SUCHE
Mitglied: 77559
77559 Jul 22, 2010 at 22:44:42 (UTC)
Goto Top
Zitat von @Daffman:
Hier ist der gesuchte Code um die find ausgabe einzuramhmen mit ascii (dos erweiterung) zeichen.
Find ich gut Daffman.

Ich hab eine ganze Zeit gebraucht um deinen Code zu verstehen.
Die temporärem Dateien und das Abspeichern in Environment Variablen ist eigentlich nicht nötig.

Mit Sonderzeichen im Text dürfte deine Version auch nicht gut klar kommen.

Hier ist eine etwas universellere und simpler aufgebaute Version, an die Textzeilen werden einfach
genug Blanks angehängt und dann bei 75 Zeichen abgeschnitten (auch ein Umbruch wäre möglich)
@Echo off & SetLocal
mode con cols=80 lines=75 
Set "pre= "  
Set Inp="%~f0"  
Set "Blanks=                                                                             "  
:: Zeilen zählen
For /f %%A in ('find /C /i "%pre%" ^<%Inp%') Do Set Zeilen=%%A  
If %Zeilen%. LSS 1. Echo Nix da und tschuess & Goto :Eof
:: Kopf
echo  +----------------------------------------------------------------------------+
echo  ^|                                                                            ^|
:: Datei-Inhalt
For /f "Delims=" %%A in ('find /i "%pre%" ^<%Inp%'  
  ) Do Set "Zeile=%%A%Blanks%" & Call :Out  
:: Fuss
echo  ^|                                                                            ^|
echo  +----------------------------------------------------------------------------+
Pause
Goto :Eof
:Out
Set "Zeile=%Zeile:"=¬%"  
Set "Zeile= | %Zeile:~0,75%|"  
set "Zeile=%Zeile:^=^^%"  
set "Zeile=%Zeile:(=^(%"  
set "Zeile=%Zeile:)=^)%"  
Set "Zeile=%Zeile:<=^<%"  
Set "Zeile=%Zeile:|=^|%"  
Set "Zeile=%Zeile:>=^>%"  
Set "Zeile=%Zeile:&=^&%"  
Set "Zeile=%Zeile:¬="%"  
Echo %Zeile%
Der Einfachheit halber habe ich die Rahmenzeichen durch einfache Striche/Kreuze ersetzt.
Wenn so ein Batch sich selbst verwursten/darstellen kann ist das schon eine Auszeichnung.
Die Techniken zum Escapen (Maskieren) der Sonderzeichen ist allerdings nicht von mir, sondern stammt AFAIK ursprünglich von Ritchie Lawrence.

ich hoffe, ich konnte deine ängste, mit einem egoistischen menschen geschrieben zu haben, beseitigen.
Um meine Ängste geht es nicht, sondern darum ALLEN Forumsbeteiligten einen Lerneffekt zu verschaffen oder wenigstens etwas Vergnügen durch (evtl. für dich unangenehme) Kommentare.

Auch dein obiger Code weist noch einige Schwachstellen auf, die nur bei einer Begutachtung durch Dritte angesprochen/verbessert werden können.

Gruß
LotPings
Member: Daffman
Daffman Jul 23, 2010 at 12:12:28 (UTC)
Goto Top
Zitat von @77559:
Mit Sonderzeichen im Text dürfte deine Version auch nicht gut klar kommen.

ich habe bis jetzt keine probleme entdeckt, kommt draauf an, von welchen du sprichst.

ich habe mir deines einmal zu herzen genommen und ausprobiert und sogleich ein problem für mich - es funktioniert wunderbar - entdeckt: wie stelle ich das an, wenn ich mehrer von diesen hintereinander habe - wenn also in vier dateien nacheinander mit dem selben such begriff gesucht werden soll. das problem ist bei mir zeile 14:
) Do Set "Zeile=%%A%Blanks%" & Call :Out
und dann 20-31:
Set "Zeile=%Zeile:"=¬%"
Set "Zeile= | %Zeile:~0,75%|"
set "Zeile=%Zeile:^=^^%"
set "Zeile=%Zeileface-sad=^(%"
set "Zeile=%Zeileface-smile=^)%"
Set "Zeile=%Zeile:<=^<%"
Set "Zeile=%Zeile:|=^|%"
Set "Zeile=%Zeile:>=^>%"
Set "Zeile=%Zeile:&=^&%"
Set "Zeile=%Zeile:¬="%"
Echo %Zeile%

da geht er danach gleich weiter zur nächsten datei und springt nimmer nach oben... wie kann man das beheben??

mfg
alexander
Mitglied: 77559
77559 Jul 26, 2010 at 07:55:09 (UTC)
Goto Top
Hallo alexander,

sorry, ich verstehe deine Frage nicht.
Welche Fehler mit welcher Batch?
Mein Original (Quelltext kopiert) funktioniert hier auf mehreren berschiedenen Windows-OS einwandfrei.

Gruß
LotPings
Member: Daffman
Daffman Jul 26, 2010 at 10:24:21 (UTC)
Goto Top
Tut mir leid, wenn ich mich unklar ausgedrückt habe:

meine frage war: wie mache ich, dass ich gleich hintereinander - z.B. - die Datei 1.txt, 2.txt und 3.txt durchsuche, mit deiner Batch die du gepostet hast??
ich habe es auf mehreren arten probiert aber nie geschafft!


mfg
alexander
Mitglied: 77559
77559 Jul 26, 2010 at 16:52:52 (UTC)
Goto Top
Sorry ich komme nicht mit,

gings es hier nicht um die Darstellung einer Datei mit einem geschlossenen Rahmen?
Meine Batch tut im Prinzip nichts anderes als deine etwas kompliziertere Version ( wobei mir klar ist das das scheinbar nur ein Fragment war)
Aber was ich nicht sehe, kann ich auch nicht verschlimmbessern face-wink

Gruß
LotPings
Member: Daffman
Daffman Jul 26, 2010 at 18:38:51 (UTC)
Goto Top
bin ich wirklich soo kompliziert? na gut face-smile also:

@Echo off & SetLocal
mode con cols=80 lines=75 
Set /p pre=
Set Inp="My Downloads.txt"  
Set "Blanks=                                                                             "  
For /f %%A in ('find /C /i "%pre%" ^<%Inp%') Do Set Zeilen=%%A  
If %Zeilen%. LSS 1. Echo Nix da und tschuess & Goto :Eof
echo  +----------------------------------------------------------------------------+
echo  ^|                                                                            ^|
For /f "Delims=" %%A in ('find /i "%pre%" ^<%Inp%'  
  ) Do Set "Zeile=%%A%Blanks%" & Call :Out  
echo  ^|                                                                            ^|
echo  +----------------------------------------------------------------------------+
Pause
Goto :Eof
:Out
Set "Zeile=%Zeile:"=¬%"  
Set "Zeile= | %Zeile:~0,75%|"  
set "Zeile=%Zeile:^=^^%"  
set "Zeile=%Zeile:(=^(%"  
set "Zeile=%Zeile:)=^)%"  
Set "Zeile=%Zeile:<=^<%"  
Set "Zeile=%Zeile:|=^|%"  
Set "Zeile=%Zeile:>=^>%"  
Set "Zeile=%Zeile:&=^&%"  
Set "Zeile=%Zeile:¬="%"  
Echo %Zeile%

Set Inp="Musik.txt"  
For /f %%A in ('find /C /i "%pre%" ^<%Inp%') Do Set Zeilen=%%A  
If %Zeilen%. LSS 1. Echo Nix da und tschuess & Goto :Eof
echo  +----------------------------------------------------------------------------+
echo  ^|                                                                            ^|
For /f "Delims=" %%A in ('find /i "%pre%" ^<%Inp%'  
  ) Do Set "Zeile=%%A%Blanks%" & Call :Out  
echo  ^|                                                                            ^|
echo  +----------------------------------------------------------------------------+
Pause
Goto :Eof
:Out
Set "Zeile=%Zeile:"=¬%"  
Set "Zeile= | %Zeile:~0,75%|"  
set "Zeile=%Zeile:^=^^%"  
set "Zeile=%Zeile:(=^(%"  
set "Zeile=%Zeile:)=^)%"  
Set "Zeile=%Zeile:<=^<%"  
Set "Zeile=%Zeile:|=^|%"  
Set "Zeile=%Zeile:>=^>%"  
Set "Zeile=%Zeile:&=^&%"  
Set "Zeile=%Zeile:¬="%"  
Echo %Zeile%

dieser code funktioniert nicht. (zur info: das erste mal ist Set Inp="My Downloads.txt" und das zweite mal Set Inp="Musik.txt")

ich hoffe, diesmal habe ich alles geschrieben und die wichtigen teile nicht nur gedacht.

mfg alexander
Member: Biber
Biber Jul 26, 2010 at 19:10:01 (UTC)
Goto Top
Und wenn du mal das "goto:eof" aus Zeile 15 vorsichtig und liebe voll clonst und sanft in Zeile 28 duplizierst?
Du hast 2x eine baugleiche und gelichnamige Prozedur namens :Out definert.. welche soll denn die CMD.exe wann und warum nehmen?
Aber okay, die zweite findet eh' keiner... da könnte ebensogut ein kleiner Haiku stehen oder "2 Becher mitbringen und Mutti anrufen".

Und zu guter Letzt... nur mal angenommen, der Schnipsel würde tatsächlich treudoof, wie Bätche nun mal sind, in den ersten "Call :Out"-Aufruf reinstolpern.. und auch tatsächlich die erste ":Out"-Subroutine finden...
Dann läuft er , da diese :Out ja nirgends mit "goto :eof" beendet wird- weiter zur nächsten Datei "Musik.txt",
von da wieder nach oben in die "Call:Out"...
...ohne Pause wieder zur "Musik.txt" ..
von da wieder zur "Call: Out".... usw.
Das kann sich hinziehen.

Wenn du möchtest, dass mehrere Dateien in eine Schleifenverarbeitung denselben Algorithmus über sich ergehen lassen sollen, dann ...
*Überraschung* solltest du diese Dateien in einer Schleife abarbeiten.
Eine FOR-Anweisung wäre meine Empfehlung.

Grüße
Biber

BTW... die jetzige Fragestellung hat in etwa so viel mit der Ursprungsfrage zu tun wie die Aussagen der FDP vor der Wahl mit ihren Aussagen 2 Minuten nach der Wahl.
Member: Daffman
Daffman Jul 26, 2010 at 20:30:52 (UTC)
Goto Top
Zitat von @Biber:
Und wenn du mal das "goto:eof" aus Zeile 15 vorsichtig und liebe voll clonst und sanft in Zeile 28 duplizierst?
Du hast 2x eine baugleiche und gelichnamige Prozedur namens :Out definert.. welche soll denn die CMD.exe wann und warum nehmen?
Aber okay, die zweite findet eh' keiner... da könnte ebensogut ein kleiner Haiku stehen oder "2 Becher mitbringen
und Mutti anrufen".


Wenn du möchtest, dass mehrere Dateien in eine Schleifenverarbeitung denselben Algorithmus über sich ergehen lassen
sollen, dann ...
*Überraschung* solltest du diese Dateien in einer Schleife abarbeiten.
Eine FOR-Anweisung wäre meine Empfehlung.


ja mit dem zweichen :OUT war mein fehler, ich hab den quelltext also verständnishilfe für mein gedankenkonstrukt verwendet und da vergessen ihn anzupassen. das war nat. von vornherein klar, dass er umbenannt gehört, doch das GOTO :EOF war clou. ich bin mit diesem befehl nicht sonderlich vertraut und weis nicht recht, wie er funktioniert - egal.

Zitat von @Biber:

BTW... die jetzige Fragestellung hat in etwa so viel mit der Ursprungsfrage zu tun wie die Aussagen der FDP vor der Wahl mit ihren
Aussagen 2 Minuten nach der Wahl.

da fällt es mir schwer etwas dazu zu sagen, da ich mich (speziel) für die deutsche politik nicht sonderlich interessiere. aber meine annahme ist, dass Du meinst, das jetzt behandelte Thema ist sehr kontrovers zur Fragestellung. Ansichtssache. Für mich ist es eine art folgefrage.

mfg
alexander

PS: aber trotzdem danke für deine hilfe face-smile
Mitglied: 77559
77559 Jul 27, 2010 at 16:33:11 (UTC)
Goto Top
Hallo alexander,

:eof ist ein immer vorhandener, von der CMD.exe vorgehaltener Label für End Of File
Ein goto :Eof bewirkt ein Beenden des laufenden Batches resp. der aktuellen Subroutine.

Das gehört immer ans Ende des Hauptteils vor ggfs vorhandene Subroutinen.

Wenn du ein Programmteil mehrfach mit unterschiedlichen Argumenten benutzen willst mach einfach eine Subroutine draus.
Wobei mir nicht klar ist, welchen Sinn mehrere am Bildschirm durchlaufende umrahmte Dateien machenn ....

FWIW ungestestet:
@Echo off & SetLocal
mode con cols=80 lines=75 
Set Set /P pre="Pre angeben: "  
Set "Blanks=                                                                             "  
For %%A in ("MY Downloads.txt"   
            "Musik.txt"       ) Do Call :ProcFile %%A  
Goto :Eof
:ProcFile
Set Inp=%1
:: Zeilen zählen
For /f %%A in ('find /C /i "%pre%" ^<%Inp%') Do Set Zeilen=%%A  
If %Zeilen%. LSS 1. Echo Nix da und tschuess & Goto :Eof
:: Kopf
echo  +----------------------------------------------------------------------------+
echo  ^|                                                                            ^|
:: Datei-Inhalt
For /f "Delims=" %%A in ('find /i "%pre%" ^<%Inp%'  
  ) Do Set "Zeile=%%A%Blanks%" & Call :Out  
:: Fuss
echo  ^|                                                                            ^|
echo  +----------------------------------------------------------------------------+
Pause
Goto :Eof
:Out
Set "Zeile=%Zeile:"=¬%"  
Set "Zeile= | %Zeile:~0,75%|"  
set "Zeile=%Zeile:^=^^%"  
set "Zeile=%Zeile:(=^(%"  
set "Zeile=%Zeile:)=^)%"  
Set "Zeile=%Zeile:<=^<%"  
Set "Zeile=%Zeile:|=^|%"  
Set "Zeile=%Zeile:>=^>%"  
Set "Zeile=%Zeile:&=^&%"  
Set "Zeile=%Zeile:¬="%"  
Echo %Zeile%

Gruß
LotPings