Fehler bei Parameterübergabe %n in Buttonbar ?!

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
googll
Junior Member
Junior Member
Posts: 20
Joined: 2013-02-09, 08:33 UTC

Fehler bei Parameterübergabe %n in Buttonbar ?!

Post by *googll »

Hallo,

wenn ich mir in der Buttonbar einen Button erstelle, der folgende Parameter hat, bekomme ich den Parameter %N bei Dateien mit Leerzeichen nicht richtig an das externe Script übergeben:

Kommando: "C:\Program Files(x86)\totalcmd\Autoit\AutoIt3.exe" "c:\Program Files(x86)\totalcmd\cmd_line_show.au3"
Parameter: "1. Parameter" "%P" "%N" "%T" "%M" "6. Parameter"

Die Parameter sind gerade wegen der Leerzeichenproblematik in Anführungszeichen eigeschlossen. Das das eigenlich ok ist, sieht man ja schon an Parameter 2, der einen Pfad mit Leerzeichen enthält und korrekt durch die Anführungszeichen übergeben wird.

Hat die aktuelle Datei (umrandet durch die gestricheltete Box) kein Leerzeichen (Bsp. cmd_line_show.au3) kommt folgendes Ergebnis der Parameterübergabe:

Code: Select all

Debug Info
$cmdLine[1] = 1. Parameter
$cmdLine[2] = c:\Program Files(x86)\totalcmd\
$cmdLine[3] = cmd_line_show.au3
$cmdLine[4] = c:\Program Files(x86)\totalcmd\
$cmdLine[5] = 
$cmdLine[6] = 6. Parameter
Hat die Datei dagegen Leerzeichen kommt

Code: Select all

Debug Info
$cmdLine[1] = 1. Parameter
$cmdLine[2] = c:\Program Files(x86)\totalcmd\
$cmdLine[3] = cmd
$cmdLine[4] = line
$cmdLine[5] = show.au3
$cmdLine[6] = c:\Program Files(x86)\totalcmd\
$cmdLine[7] = 
$cmdLine[8] = 6. Parameter
Als Workaround habe ich dann 2 Anführungszeichen probiert:

"1. Parameter" "%P" ""%N"" "%T" "%M" "6. Parameter"

Ergebnis:

Code: Select all

Debug Info
$cmdLine[1] = 1. Parameter
$cmdLine[2] = c:\Program Files(x86)\totalcmd\
$cmdLine[3] = cmd line show.au3"
$cmdLine[4] = c:\Program Files(x86)\totalcmd\
$cmdLine[5] = 
$cmdLine[6] = 6. Parameter
Anzahl der Parameter stimmt, allerdings ist bei Parameter Nr. 3 ist vorne kein Anführungszeichen vorhanden, aber ein hinteres !!!


Autoit Script zur Anzeige der Cmd Parameter:

Code: Select all

#include <debug.au3>

GLOBAL $dummy	=	''
Global $i

_DebugSetup("Debug Window")

for $i = 1 TO  $cmdLine[0]
	$dummy = $dummy & '$cmdLine[' & $i & '] = ' & $cmdLine[$i] & @CRLF
next 
_DebugOut('Debug Info'  &  @CRLF & _ 
		$dummy  _
		)
[/code]
User avatar
Dalai
Power Member
Power Member
Posts: 9977
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Probier's mal ohne Anführungszeichen. Außerdem würde ich persönlich die Parameter %P und %N zusammenfassen, denn wenn man schon AutoIt verwendet, kann man in diesem Skript auch gleich Pfad und Dateiname trennen (auch wenn das leicht komplizierter ist als in Batch).

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1050
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR »

Autoit entfernt Anführungszeichen um Parameter. Schau Dir die $CmdLineRaw Variable an, um zu sehen was wirklich übergeben wird.
User avatar
Dalai
Power Member
Power Member
Posts: 9977
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

ZoSTeR wrote:Autoit entfernt Anführungszeichen um Parameter.
Ah, stimmt. Für diesen Fall hab ich mir vor einiger Zeit eine Hilfsfunktion geschrieben, analog zu der Funktion AnsiQuotedStr in Delphi:

Code: Select all

Func _StringQuote($str, $char = '"')
    Return StringFormat('%s%s%s', $char, $str, $char)
EndFunc

Func _StringQuote($str, $char = '"')
    local $s = $char & $str & $char
    Return $s
EndFunc
Wobei man genaugenommen die Funktion StringFormat vermeiden sollte, weil Pfade mit \n, \t und ähnlichem verändert werden, weil das Escape-Sequenz sind. Deshalb die zweite Variante.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
googll
Junior Member
Junior Member
Posts: 20
Joined: 2013-02-09, 08:33 UTC

Post by *googll »

2ZoSTeR

habs getestet. Wenn ich die Parameter ohne " übergebe, fügt der TC bei den Variablen %P %N %T %M keine " ein.
Das kann ich an der $CmdLineRaw sehen. Daher ist es für das Script so, das es anscheinend mehr Parameter sind als eigentlich gewollt.

Mit " klappt alles ohne Probleme nur "%N" funkt nicht so wie es soll, da muss ich ein 2. " vorne und hinten setzen...

Gruß
Christian
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1050
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR »

Verwende statt "%N" "%O.%E"
So setzt der TC keine automatischen Anführungszeichen bei Dateinamen mit Leerzeichen.
Post Reply