water das unicode /ansi Problem tritt bei Benutzung von z.B. notepad++ als Texeditor nicht auf, da dort die "Zeichensätze" eingestellt werden können.
32k Grenze?
Gruß
Peter
water das unicode /ansi Problem tritt bei Benutzung von z.B. notepad++ als Texeditor nicht auf, da dort die "Zeichensätze" eingestellt werden können.
32k Grenze?
Gruß
Peter
Ich rede aber nicht von Notepad++ sondern den Ini-Funktionen von AutoIt. Und die 32k Grenze findest Du unter Inireadsection. Ist eine Limitierung von MS.
Ich spreche auch von der Ini!!!!
Die ini muss ja mit etwas erstellt, geschrieben, befüllt werden! Und wenn Du den falschen Editor zum erstellen, schreiben, befüllen nimmst, kann das tatsächlich schon mal zu Zeichensatzproblemen führen ---> daher mein Hinweis auf Notepad++ damit ist klar definiert in welchem "Dialekt sprich Teichensatz" man schreibt.
Gruß
Peter
Klemmt bei Deiner Tastatur das Rufezeichen ?
Ja!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
dir ist aber bekannt, dass das Ausrufezeichen als "schreien" gilt?
Nein! Ein Ausrufezeichen unterstreicht lediglich eine Aussage, oder hebt diese hervor.... etwas anderes hebe ich dazu noch nie gehört!
Peter
der Beitrag ist bereits 6 Jahre alt ... ==> NZZ
bewegt sich das auf dem Niveau?
wenn du meinst
Ich verbinde das Ausrufezeichen auch eher mit dem Imperativ.
Also zur Klärung:
1 Ausrufezeichen: nur Imperativ
<1 Satzzeichen (?!): Imperativ mit "Zorn-"komplex (à la: noch mit der Faust auf den Tisch hauen um dem ganzen Nachdruck zu verleihen. Da liebe ich den Satz von meinem Deutschlehrer damals: Satzzeichen sind keine Rudeltiere!)
komplette Wörter in CAPS: gilt im web als schreien
OffTopic:
weil mich das schon länger irritiert:
Ab 19-10-22 ergänzt um:
Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)
Hallo alle Miteinander,
zunächst möchte ich allen ein gutes aber vor allem ein gesundes neues Jahr 2025 wünschen und mich für die Beiträge bedanken.
Leider ist aufgrund der Diskussion der Kern der Frage ins Abseits gerückt:
Worin besteht der Unterschied im Aufruf von Shellexecute, dass dieser funktioniert wenn ich
ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""")
direkt aufrufe und der Aufruf von
Shellexecute($aArray[9]) -wobei der Inhalt des Indexes 9 exakt der Zeichenfolge des manuellen Aufrufes entspricht., nicht funktioniert und er die Datei nicht findet...
Die Debugausgabe von ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : ShellExecute(' & $aArray[9] & ') - '& @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
gibt folgendes Ergebnis zurück:
@@ Debug(14) : ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""")
Das zeigt, dass der Shellexecutebefehl exakt gleich ist, also sollte dieser doch auch funktionieren
Der Vorschlag von Moombas mit Stringsplit macht ja im Grunde nichts anderes als den String des Indexes in 2 Teile zu zerlegen und diese dann zum gleichen Shellexecutebefehl wie oben zusammenzusetzen...
Der Vorschlag von Moombas mit Stringsplit macht ja im Grunde nichts anderes als den String des Indexes in 2 Teile zu zerlegen und diese dann zum gleichen Shellexecutebefehl wie oben zusammenzusetzen...
Nein, da ist ein großer Unterschied.
ShellExecute ist eine Funktion, die mehrere Parameter nimmt: 1. Den Dateinamen der auszuführenden Datei, 2. Parameter die übergeben werden sollen, 3. Das Arbeitsverzeichnis (der Ordner, von dem alle relativen Pfade im ausgeführten Programm ausgehen),...
Wenn du im Code ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""") ausführst ist der 1. Parameter: "eventvwr.exe" und der 2. Parameter: "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml"""
Es wird also die Executable "eventvwr.exe" ausgeführt.
Wenn du aber Shellexecute($aArray[9]) mit $aArray[9]="eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""" ausführst, entspricht der 1. Parameter: "eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml"""
Es wird also versucht, die Executable "eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""" auszuführen, aber es gibt natürlich keine Datei mit dem Namen, kann es auch garnicht, weil bestimmte Zeichen gar nicht erlaubt wären.
Nur weil du die Ausgabe als String genauso aussehen lässt, heißt das noch lange nicht, dass der Code auch genauso aussieht und es das Gleiche ist.
Du musst also irgendwie aus deinem $aArray[9] zwei Variablen bekommen, damit du eine als executable für Parameter 1 nehmen kannst und die andere für Parameter 2.
Das ist es, was Moombas mit dem StringSplit versucht hat. Wobei das vermutlich nicht funktioniert hat, weil bei "eventvwr.exe" die Anführungszeichen mit geschickt werden.
Aber dafür könnte man sich ja mal mit _ArrayDisplay(StringSplit($aArray[9], ', ', BitOr(1,2))) (benötigt #include <Array.au3>) anschauen, was in dem StringSplit genau rauskommt und ggf. noch die Anführungszeichen entfernen (StringLeft/StringRight/StringMid).
Worin besteht der Unterschied im Aufruf von Shellexecute, dass dieser funktioniert wenn ich
ShellExecute("eventvwr.exe", "/v:""C:\ProgramData\Microsoft\Event Viewer\Views\View_1.xml""")
direkt aufrufe und der Aufruf von
Shellexecute($aArray[9]) -wobei der Inhalt des Indexes 9 exakt der Zeichenfolge des manuellen Aufrufes entspricht., nicht funktioniert und er die Datei nicht findet...
Der erste Aufruf übergibt 2 Parameter an Shellexecute, der zweite Aufruf übergibt lediglich einen Parameter.
Der Inhalt kann also schlicht nicht exakt der Zeichenfolge entsprechen.
Grundsätzlich: ShellExecute erwartet den Pfad zu einer Datei als 1. Parameter.
Anhand deren Dateiendung wird in der Registry nachgeschaut wie diese Dateiart zu behandeln ist.
Sollen noch Parameter übergeben werden, werden diese bei ShellExecute ausschließlich in den 2. Parameter geschrieben.
Anders sieht es bei Run aus - dort kann ein Gesamtstring übergeben werden.
Hallo Kanashius und Aspirinjunkie,
vielen lieben Dank für eure Erklärungen. Damit ist mir klar warum das nicht funktioniert. Aber es ist schon sehr seltsam, dass das eben seither funktionierte und dann auf einmal
und das nach Monaten oder Jahren nicht mehr.
Im Übrigen, der Code von Moombas mit dem Stringsplit funktioniert. Ich habe jedoch den Pfad zur XMl-Datei angepasst (sprich: die Datei nach C:\Daten kopiert) wegen des Freizeichens im Ordnername "Event Viewer". Das spart eine Menge Anführungszeichen und der Code für die Parameter muss nicht angepasst werden.
Das ist jetzt die Ausgabe von _DebugArraydisplay:
Row|Col 0
# 0|"eventvwr.exe"
# 1|"/v:C:\daten\Views\View_0.xml"
Auch für Euch ein gutes und vor allen dingen gesundes neues Jahr 2025 und nochmals vielen herzlichen Dank für die Erklärung
Im Übrigen, der Code von Moombas mit dem Stringsplit funktioniert. Ich habe jedoch den Pfad zur XMl-Datei angepasst (sprich: die Datei nach C:\Daten kopiert) wegen des Freizeichens im Ordnername "Event Viewer". Das spart eine Menge Anführungszeichen und der Code für die Parameter muss nicht angepasst werden.
Das Ding mit den Leerzeichen umgehst du ganz einfach, weshalb (ich persönlich) immer empfehle im Quellcode per default ' für Strings zu nutzen anstatt ".
Warum das so ist erkläre ich dir gerne hier:
Dein String mit dem du arbeiten willst enthält einen Pfad und/oder Dateinamen (wie in deiner Situation) mit Leerzeichen, muss also vom System her mit " eingefasst werden.
//1:1 String vom Pfad (als Beispiel): C:\dein Ordner\deine Datei.txt
//1:1 String den das System erwartet: "C:\dein Ordner\deine Datei.txt"
//In Autoit könnte man dies nun mit mehrfachen " lösen:
$String = """C:\dein Ordner\deine Datei.txt"""
Das sieht aber (aus meiner Sicht) nicht nur unschön aus, sondern kann auch verwirren, gerade bei langen Strings (mit ggf vielen "). Auch muss man das dann immer im Blick haben, falls in einem String auch mal so " vorkommen.
Original Text Beispiel: Ich bin ein "Test" Text.
//Würde man per default " nutzen ohne drüber nachzudenken das dort " drin sind, wäre das in Autoit so:
$String = "Ich bin ein "Test" Text."
//Und fällt damit sofort auf die Nase, weil hier richtig wäre es so zu machen:
$String = "Ich bin ein ""Test"" Text."
Wenn ich dann diese beiden Beispiele nehme und ' Anwende, ist das besser zu lesen und vor Fehlern besser gefeit, sofern man nicht viele Strings nutzt, die wiederum ' enthalten (da würde man es dann genau andersherum machen):
In bestimmten Situationen macht es auch Sinn Leerzeichen ganz aus einem String zu entfernen oder durch einen _ (Unterstrich) zu ersetzen.
Peter
An welche Situationen denkst Du da? Je konkreter eine Aussage, desto hilfreicher für die Forenteilnehmer