Batch Aus Variable Klammern und Inhalt dazwischen löschen (in FOR Schleife)

Phoenix22

Cadet 1st Year
Registriert
Jan. 2023
Beiträge
14
Hallo :)
Habe folgendes Problem:
Ich kenne es zwar Zeichen in einer Variable zu ersetzen per
Code:
SET !variable:suche=ersetze!
aber leider funzen da keine Platzhalter, so das sowas ginge, um Klammern und den Inhalt dazwischen zu löschen,
also "Texttext (bsp) abc" -> "Texttext abc"
Code:
SET !variable:(*)=!
Ich nutze hier ! statt %, da das ganze innerhalb einer FOR Schleife funzen soll.

Was auch ginge: Alles ab der ersten Klammer weglassen, also "Texttext (bsp) abc" -> "Texttext "
Leider geht ja bei SET nur das Gegenteil, also alles vor der Klammer weglassen, was ja so ginge:
Code:
SET !variable:*(=!

Angeblich soll das auch per CALL gelöst werden können, aber will auch nicht klappen.
Wäre toll wenn da jemand helfen könnte. Danke :D
 
Zuletzt bearbeitet:
Warum Verrenkungen in der Batch?
Die Powershell ist eine wesentlich schoenere Scriptsprache, und existiert seit mehr als 15 Jahren. Warum noch so viele Neulinge heutzutage versuchen Batchscripte zu schreiben verstehe ich nicht.
Aber es hat vermutlich den gleichen Grund warum die Netzklassen auch nach mehr als 20 Jahren nicht totzukriegen sind :D

In der Powershell ist arbeiten mit Strings soooo viel einfacher, runde Klammern zB. muessen garnicht escaped werden.
 
  • Gefällt mir
Reaktionen: Phoenix22, sikarr und kartoffelpü
Jup, ich kann auch nur zu Powershell raten, wenn es um Windows-Scripting geht.
Ist zwar anfangs erst mal eine große Umgewöhnung, aber vieles geht viel einfacher/logischer (Stichwort Objekte & Attribute) als mit Batch.
 
Ok. Was sind das denn dann für ein Datei Typ ?
Hab was von ps1 gelesen, aber nach Doppelklick wird da Powershell nicht benutzt.
 
.ps1 ist schon richtig. Es kann sein (bzw. ist wahrscheinlich), das du aufgrund der Standardexecution-Policy kein Powershellscript per Doppelklick starten kannst, dann oeffnet sich entweder Notepad oder die ISE beim Doppelklick auf eine .ps1 Datei.
Googlestichwort: Powershell Execution Policy.

Apropos ISE: Das ist eine mit Windows mitgelieferte Powershell IDE mit Syntaxhighlighting und rudimentaeren Debugfaehigkeiten. Das reicht fuer den Anfang auf alle Faelle und ist wesentlich besser als nur Notepad zum scripten :D
Ansonsten, wenns komplexer wird, Visual Studio Code.
 
  • Gefällt mir
Reaktionen: Phoenix22 und sikarr
Jup .ps1 ist der Richtige Typ. Kommt drauf an was du machen willst, also wer soll das Script am Ende aufrufen.
Powershell Scripte werden eigentlich in einer IDE geschrieben und nicht als Textfile, Windows bringt eine mit, die "Powershell ISE" darin kannst du die ps1 auch für den Anfang öffnen.
Ergänzung ()

Ranayna schrieb:
Es kann sein (bzw. ist wahrscheinlich), das du aufgrund der Standardexecution-Policy kein Powershellscript per Doppelklick starten kannst
geht auch mit geänderter Policy nicht und sollte man auch nicht machen.
Du kannst sie entweder direkt in der Powershell CLI aufrufen oder aber über CMD oder Batch brauchst dann aber noch ein paar Parameter dazu.
 
  • Gefällt mir
Reaktionen: Phoenix22
sikarr schrieb:
geht auch mit geänderter Policy nicht und sollte man auch nicht machen.
Tatsaechlich nicht? Ich muss gestehen das ich das nie ausprobiert habe :D
Entweder aus einem existierenden PS Fenster, oder aus der ISE heraus. Was aber gehen muesste, zumindest habe ich die Option auf meinem Windows 10 hier, ist ein Rechtsklick, und dann "Run with Powershell", auf Deutsch vermutlich "Mit Powershell ausfuehren".

Und das habe ich grade mal spasseshalber getestet: Das ignoriert die Execution Policy :o Mein Script hat er so direkt ausgefuehrt.
 
Ranayna schrieb:
Was aber gehen muesste, zumindest habe ich die Option auf meinem Windows 10 hier, ist ein Rechtsklick, und dann "Run with Powershell", auf Deutsch vermutlich "Mit Powershell ausfuehren".
Genau das ist der Weg den man nehmen sollte.
Ranayna schrieb:
Und das habe ich grade mal spasseshalber getestet: Das ignoriert die Execution Policy :o Mein Script hat er so direkt ausgefuehrt.
Kommt drauf an, hast du das Script selber geschrieben dann wahrscheinlich ja, wenn es aber von einem anderen Rechner kommt oder du es aus dem Internet hast sollte die Policy wieder greifen. Generell abschalten sollte man sie nie da damit auch Schadsoftware ungefragt .ps1 Code ausführen kann. Als generellen Schutz sollte man es aber auch nicht sehen.
 
  • Gefällt mir
Reaktionen: Phoenix22
Es geht per rechte Mausraste "mit Powershell ausführen".
Wäre nice, wenn das auch per Doppelklick ginge.
Mache nur einfache Mini-Tools für mich, die Dateien vergleichen, kopieren, umbenennen, etc.
Da möchte ich das Skipt einfach schnell wohin kopieren und ma liebsten per Doppelklick ein Arbeit tun lassen.
Ergänzung ()

Ok, hab die Rechte schnell wieder alle auf Undefined gesetzt. :D
Ergänzung ()

Aber da ich nicht so viel mache, wäre eine Lösung für mein eigentliches Problem auch ganz nett. :)
 
Phoenix22 schrieb:
Wäre nice, wenn das auch per Doppelklick ginge.
Geht auch ist aber etwas umständlicher, du könntest das Script in eine Batch schreiben, du kannst .ps1 auch aus Batch aufrufen.
Phoenix22 schrieb:
Aber da ich nicht so viel mache, wäre eine Lösung für mein eigentliches Problem auch ganz nett. :)
Ich habe dein Problem ehrlich gesagt nicht ganz verstanden, etwas mehr Infos wäre nicht schlecht.
 
sikarr schrieb:
Kommt drauf an, hast du das Script selber geschrieben dann wahrscheinlich ja, wenn es aber von einem anderen Rechner kommt oder du es aus dem Internet hast sollte die Policy wieder greifen.
Mein Script ist selber geschrieben, aber schon ein ganzes Weilchen aelter, es ist nicht auf meinem aktuellen Rechner geschrieben, sondern ich habs immer nur mitkopiert.

Warum es mich wundert: In der ISE bekomme ich die Execution Policy Warnung wenn ich die Datei da oeffne, und einfach Start klicke. Bis jetzt bin ich immer hingegangen: STRG-A, STRG-C, neues Script, STRG-V und dann Start. So meckert die ISE nicht :p
So oft brauche ich das Teil nicht als das ich deswegen an der Execution Policy rumfummeln wollen wuerde.
 
sikarr schrieb:
Ich habe dein Problem ehrlich gesagt nicht ganz verstanden, etwas mehr Infos wäre nicht schlecht.
Ein Variable mit Textinhalt soll wie oben angegeben bearbeitet werden.
Ausführlicher geht's mMn nach nicht.
 
Den ersten Link hatte ich auch gefunden, da ist ja sowas ganz unten.
Mit % funzt aber leider nicht in FOR Schleifen, ist alles was kompliziert.
 
Mir liegt dunkel was davon an, das du in Schleifen die % escapen musst. Mit einem weiteren %, wenn ich mich richtig erinnere.
Und genau deswegen mag ich Batch nicht :D Kompliziertes und inkonsistentes Verhalten, was zu schlecht les- und wartbarem Code fuehrt.
 
Zurück
Oben