138701
Goto Top

Script nicht verstanden

Hallo zusammen,

Könnte mir jemand das nachfolgende Script erklären?

@echo off&setlocal enableDelayedExpansion
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "DEL=%%a %%a"  
set text=text: 
<nul >"%temp%\'" set /p "=."  
call :c&set /p id=
:c
':  
cd \
for /f delims^=^ eol^= %%s in ("%text%") do (  
  >colorPrint.txt (echo %text%\..\')  
  findstr /a:0B /f:colorPrint.txt "."  
  <nul set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"  
)
exit /b

Content-ID: 456920

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

Ausgedruckt am: 24.11.2024 um 21:11 Uhr

lcer00
lcer00 29.05.2019 um 14:09:51 Uhr
Goto Top
Hallo

schreibe uns doch entweder
- was Du nicht verstehst oder
- was Du verstehst.

Je nachdem was schneller geht.

Grüße


lcer
SomebodyToLove
SomebodyToLove 29.05.2019 um 14:10:58 Uhr
Goto Top
Ich kann dir leider nicht helfen, aber für die Zukunft:

Zitat von John Woods:
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability.
Pjordorf
Pjordorf 29.05.2019 um 14:15:55 Uhr
Goto Top
Hallo,

Zitat von @SomebodyToLove:
Zitat von John Woods:
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability.
Geh davon aus das der TO den Code irgendwo im Internet gefunde hat, es geschafft hat diesen zu kopieren, aber keine Ahnung hat was der tut, und grundsätzlich keine Quellen preisgibt. Typisch Copy and Paste Fraktion.

Gruß,
Peter
Pedant
Pedant 29.05.2019 um 15:08:26 Uhr
Goto Top
Hallo Ileies,

abgesehen von den bisherigen, validen Kommentaren der Kollegen...

Erklären kann ich ihn Dir nicht vollständig, da er nicht ohne Fehler läuft und recht unklar ist was er bezwecken soll.
Ein paar Zeilen kommentiere ich hier mal:

Zeile 2 belegt die Variable namens DEL mit drei Zeichen und zwar einem Backspace, einem Leerzeichen und einem Backspace.
Zeile 3 belegt die Variable namens text mit der Zeichenfolge "text: " (ohne die Anführungszeichen).
Zeile 4 erzeugt im Temp-Ordner eine Daten namens ' mit einem . als einzigen Inhalt, also auch ohne anschließendem Zeilenumbruch.
Zeile 10 speichert die Zeichenfolge %text%\..\' also text: \..\' in einer Daten namens colorPrint.txt.
Zeile 11 sucht in einer Liste von Dateien die Zeichenfolge .
Die Liste von Dateien sollte dabei eigentlich in colorPrint.txt enthalten sein, aber colorPrint.txt enthält keine gültigen Pfad-/Dateinamen, sondern den statischen Text text:\..\'
Zeile 12 gibt 7-mal den Inhalt von DEL aus, also 7-mal "Backspace Leerzeichen Backspace" ohne anschließendem Zeilenumbruch.
Eventuell soll hier eine Ausgabe gelöscht werden, aber die Ausgabe eines Leerzeichen gefolgt von einem Backspace, der das ausgegebene Leerzeichen wieder löscht, erschließt sich mir nicht.

Wo hast Du den Code her und was soll er Deiner Meinung nach tun?

Gruß Frank
138701
138701 29.05.2019 aktualisiert um 15:25:30 Uhr
Goto Top
@lcer00
Ich verstehe von jeder Zeile was sie tut.
Ich verstehe von Zeile 2, 4 und 11 nicht, wie sie es tun.

@Pjordorf
Bei dem Code geht es um die Farbänderung eines einzelnen Strings.
Das ursprünglich 72 Zeilen lange Programm, welches die IP auslesen sollte,
habe ich sehr stark verändert/umgeformt, bis ich hierzu kam.
Pedant
Pedant 29.05.2019 um 16:08:27 Uhr
Goto Top
Hallo Ileises

Zitat von @138701:
Ich verstehe von jeder Zeile was sie tut.
Ich verstehe von Zeile 2, 4 und 11 nicht, wie sie es tun.
Prima, dann erklär mir bitte die Zeile 7:
':
Auf meinem Rechner haben die Laufwerke Buchstaben von A-Z.
Ein Laufwerk mit der Bezeichnung ' habe ich nicht.
Das System kann das angegebene Laufwerk nicht finden.

z.B. Zeile 4:
<nul >"%temp%\'" set /p "=."
Da bei set /p "=." keine Variable angegeben ist, die mit . belegt werden soll wird . einfach nur ausgegeben.
Es wird dann aber auf weitere Eingabe und vor allem auf Enter gewartet.
<nul übernimmt hier die Eingabe von Enter
echo . würde fast dasselbe bewirken wie <nul set /p "=." allerdings mit der Ausgabe einer zusätzlichen Leerzeile.
>"%temp%\'" leitet die Ausgabe um in eine Datei namens ' im Temp-Ordner des Systems.
(Nicht gerade ein schöner Dateiname, aber egal.)
echo .>"%temp%\'" würde eine Datei in Temp erzeugen, die ' heißt und als Inhalt . gefolgt von einem Zeilenumbruch erhält.
<nul >"%temp%\'" set /p "=." macht dasselbe, allerdings ohne den Zeilenumbruch.

Gruß Frank
Kraemer
Kraemer 29.05.2019 um 16:33:31 Uhr
Goto Top
Zitat von @138701:
Das ursprünglich 72 Zeilen lange Programm, welches die IP auslesen sollte,
habe ich sehr stark verändert/umgeformt, bis ich hierzu kam.
war wohl nen bisschen viel umformen face-wink
138701
138701 29.05.2019 um 16:35:18 Uhr
Goto Top
Pedant
Pedant 30.05.2019 um 09:48:57 Uhr
Goto Top
Hallo Ileies,


Dort ist zunächst nur "Undefiniertes Laufwerk" zu Lesen.
Was soll das erklären?

Ein Bild dort zeigt:
C:\Users\xxxx\>':':\>

Meine Eingabeaufforderung sagt allerdings etwas anderes:
C:\Users\xxxx\>':=> Das System kann das angegebene Laufwerk nicht finden.

Falls ich ein Pinterest-Account anlegen müsste, um eventuelle Erklärungen in Deinem Link zu finden, lehne ich dankend ab.

Gruß Frank
Penny.Cilin
Penny.Cilin 30.05.2019 um 11:01:33 Uhr
Goto Top
Erwartest Du jetzt, daß wir diesen Link aufrufen?
Sorry, wer weiß wo dieser Link hinführt.

Gruss Penny.
Pjordorf
Pjordorf 30.05.2019 um 21:39:08 Uhr
Goto Top
Hallo,

Zitat von @Pedant:
Was soll das erklären?
C:\Users\xxxx\>':':\>
Das sich der dargestellte Pfad evtl. geändert hat.

Meine Eingabeaufforderung sagt allerdings etwas anderes:
C:\Users\xxxx\>':=> Das System kann das angegebene Laufwerk nicht finden.
Habe jetzt auch Win 7 , Win 8, Win 8.1 und Win 10 1809 durch. Bekomme auch nur Fehler. Evtl ist ja bei dir eine besonder Erweiterung zur Eingabeaufforderung aktiv oder eingeschaltet, evtl. auch durch den uns unbekannten Quelletext, der evtl. Popp und Push verändert.

Nachvollziehen kann ich es auch nicht was dort gemacht werden soll.

Gruß,
Peter
Pedant
Pedant 31.05.2019 um 09:07:31 Uhr
Goto Top
Hallo Penny,

Zitat von @Penny.Cilin:
...wer weiß wo dieser Link hinführt.

Er führt hier hin:
https://www.pinterest.de/pin/625437466982381372

Gruß Frank
Penny.Cilin
Penny.Cilin 31.05.2019 um 09:59:15 Uhr
Goto Top
Zitat von @Pedant:

Hallo Penny,

Zitat von @Penny.Cilin:
...wer weiß wo dieser Link hinführt.

Er führt hier hin:
https://www.pinterest.de/pin/625437466982381372
OK, danke für die Info. Trotzdem: Warum sollen wir den Link aufrufen?
Stattdessen soll er das ganze Skript per Copy-und-paste hier einfügen.

Gruß Frank

Gruss Penny.
rubberman
rubberman 31.05.2019 um 12:49:14 Uhr
Goto Top
Kurz zusammengefasst:
Aus dem Prompt wird ein Backspace extrahiert und in Variable DEL, die aus der Kombination Backspace-Space-Backspace besteht, zu einem Wert zusammengebaut, der in der Lage ist Zeichen in einer Ausgabe von hinten nach vorn mit Leerzeichen zu überschreiben. Es wird eine Temporäre Datei angelegt. Mit FINDSTR wird diese gesucht und die Ausgabe mit Option /A farbig untersetzt. Das mehrfache %DEL% löscht alles aus der Ausgabe weg, was nicht zum gewünschten String gehört.

Mittlerweile natürlich völliger Unsinn. Die neue Windows 10 Console unterstützt ANSI Escapesequenzen. Auch für ein Batchscript ...

Steffen
Pjordorf
Pjordorf 31.05.2019 um 13:18:34 Uhr
Goto Top
Hallo,

Zitat von @rubberman:
Die neue Windows 10 Console unterstützt ANSI Escapesequenzen. Auch für ein Batchscript ...
Vermutung das der TO Windows 10 nutzt oder gewissheit?

Gruß,
Peter
rubberman
rubberman 31.05.2019 um 14:07:21 Uhr
Goto Top
Zitat von @Pjordorf:
Vermutung das der TO Windows 10 nutzt oder gewissheit?
Warum fragst du mich? Ist mir doch egal. Support für Win7 läuft in ein paar Monaten aus und Gründe noch ein Win8(.1) am Laufen zu haben, gibt es nicht. So what? Also gehe ich von Win10 aus, ja.
Und wer heute noch versucht Batch zu lernen, ist selbst schuld. (Bei mir als Dinosaurier ist das was anderes. Ich muss das nicht mehr lernen, sterbe bald aus und Batch zusammen mit meiner Generation. Und das völlig zu Recht ...)

Steffen
Pjordorf
Pjordorf 31.05.2019 um 14:21:26 Uhr
Goto Top
Hallo,

Zitat von @rubberman:
Warum fragst du mich?
Weil du es so geschrieben hast als ob du es wüsstest. face-smile

Also gehe ich von Win10 aus, ja.
OK OK, Ruhig Brauner face-smile

Gruß,
Peter
138701
138701 31.05.2019 um 18:41:33 Uhr
Goto Top
@rubberman

Ich benutze meistens Windows 7.
rubberman
rubberman 31.05.2019 um 19:14:21 Uhr
Goto Top
Ich benutze meistens Windows 7.
Von mir aus, ist deine Entscheidung. Wie gesagt, Support für Win7 endet am 14. Januar '20. Da kannst du also langsam Tschüss sagen.

Steffen