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-Key: 456920

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

Printed on: April 24, 2024 at 01:04 o'clock

Member: lcer00
lcer00 May 29, 2019 at 12:09:51 (UTC)
Goto Top
Hallo

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

Je nachdem was schneller geht.

Grüße


lcer
Member: SomebodyToLove
SomebodyToLove May 29, 2019 at 12:10:58 (UTC)
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.
Member: Pjordorf
Pjordorf May 29, 2019 at 12:15:55 (UTC)
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
Member: Pedant
Pedant May 29, 2019 at 13:08:26 (UTC)
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
Mitglied: 138701
138701 May 29, 2019 updated at 13:25:30 (UTC)
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.
Member: Pedant
Pedant May 29, 2019 at 14:08:27 (UTC)
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
Member: Kraemer
Kraemer May 29, 2019 at 14:33:31 (UTC)
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
Mitglied: 138701
138701 May 29, 2019 at 14:35:18 (UTC)
Goto Top
Member: Pedant
Pedant May 30, 2019 at 07:48:57 (UTC)
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
Member: Penny.Cilin
Penny.Cilin May 30, 2019 at 09:01:33 (UTC)
Goto Top
Erwartest Du jetzt, daß wir diesen Link aufrufen?
Sorry, wer weiß wo dieser Link hinführt.

Gruss Penny.
Member: Pjordorf
Pjordorf May 30, 2019 at 19:39:08 (UTC)
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
Member: Pedant
Pedant May 31, 2019 at 07:07:31 (UTC)
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
Member: Penny.Cilin
Penny.Cilin May 31, 2019 at 07:59:15 (UTC)
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.
Member: rubberman
rubberman May 31, 2019 at 10:49:14 (UTC)
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
Member: Pjordorf
Pjordorf May 31, 2019 at 11:18:34 (UTC)
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
Member: rubberman
rubberman May 31, 2019 at 12:07:21 (UTC)
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
Member: Pjordorf
Pjordorf May 31, 2019 at 12:21:26 (UTC)
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
Mitglied: 138701
138701 May 31, 2019 at 16:41:33 (UTC)
Goto Top
@rubberman

Ich benutze meistens Windows 7.
Member: rubberman
rubberman May 31, 2019 at 17:14:21 (UTC)
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