Jump to content

WHen I use single quates ' the = sign disapears :(


LyonR
 Share

Go to solution Solved by LyonR,

Recommended Posts

 

Can any explaine why this happens ?

;WHen I use single quates ' the = sign disapears :(

Local $a = " 'Test=Test' "
Local $b = ' "Test=Test" '

MsgBox( 0, "Test", $a ) ; OK
MsgBox( 0, "Test", $b)  ; OK

Run("TestCQl.cmd" & $a ) ;Missing =
Run("TestCQl.cmd" & $b ) ; OK


;Just at simpel file there writes output to a Dos Console
;TestCQL.cmd
;@echo off
;echo %1 %2 %3 %4 %5 %6 %7 %8

BG

Lyon

 

 

 

Link to comment
Share on other sites

Interesting catch.

This seems not to be autoit related, but the way @comspec (cmd.exe) is handling parameters:

 

Local $a = "'Test=Test'"
Local $b = '"Test=Test"'

; MsgBox( 0, "Test", $a ) ; OK
; MsgBox( 0, "Test", $b)  ; OK

$result=RunWait(@ComSpec & " /c c:\temp\Test.cmd " & $a , @TempDir) ;Missing =
$result=RunWait(@ComSpec & " /c c:\temp\Test.cmd " & $b , @TempDir) ; OK

 

rem C:\temp\test.cmd

@echo on
echo paramstr0=%0
echo paramstr1=%1
echo paramstr2=%2
echo paramstr3=%3
REM ... use shift to access params > 9
pause
Edited by rudi

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

In windows cmd, the standard separator is double quote. Somehow "=" is also a valid but unofficial separator.

So in the above example, $a is actually:

'Test=Test'

, $b is actually

"Test=Test"

cmd interpret the 'Test=Test' as two parameters: ['Test] and [Test'], so the "=" just disappeared as an separator.

Link to comment
Share on other sites

  • Solution

 

It's for passing password to a CLI program.

The "funny" thing are that echo Test^=Test are working but echo 'Test^=Test' are not.

So if my user are using " in the password I use 'Password'  and if they use = I use "Password", and then I hobe that they are not using "= ;)

Thank guy's for pointing me in the right direction. :)

 

 

Link to comment
Share on other sites

to get output from and pass input to an CLI program you can interactively get / put both using run (not runwait) and the $PID to interact with the CLI

#include <AutoItConstants.au3>



$MyPWD="echo Top*secreT99"
AdlibRegister("ToolTipUpdater")
$StrOut=""


$PID=run(@ComSpec,@TempDir,@SW_HIDE,$STDIN_CHILD + $STDERR_MERGED)
$start=TimerInit() ; to exit the currently infinte while loop after 30 seconds

while ProcessExists($PID)
    $StrOut&=StdoutRead($PID)
    ; do what you need to analyse output, e.g.
    if StringRight($StrOut,1)=">" Then
        StdinWrite($PID,$MyPWD & @CRLF)
        Sleep(1000)
    EndIf
    if TimerDiff($start) > (30*1000) Then
        ProcessClose($PID)
        ExitLoop
    EndIf

WEnd

StdioClose($PID)

MsgBox(0,"PID vanished","PID " & $PID & " doesn't exist any more.")


Func ToolTipUpdater()
    ToolTip($StrOut)
EndFunc

 

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...