Sign in to follow this  
Followers 0
MachinistProgrammer

Autoit Command Line Interpreter!

4 posts in this topic

#1 ·  Posted (edited)

I don't know if it has been done before But Here is a CMD version of Autoit.

the following functions  don't work:
tcpaccept
tcpclosesocket
tcpconnect
tcplisten
tcpnametoip - however there is NSLookUp
tcprecv
tcpsend
tcpshutdown
tcpstartup
DllStructCreate
DllStructGetData
DllStructGetSize
DllStructGetSize
DllStructSetData
And anything that uses an Array
For further help go to www.autoitscript.com
the command line version of autoit dose have some extra commands such as
Repeat("command",times) - will Repeat any command
RunSelf() - open a new instance of Autoit Command line interpreter
Echo("text") - Prints text to console. however putting somthing as a string will do the same
About() - prints information about Autoit Command line interpreter
Clear() - Clears Autoit Command line interpreter
Dir(dir = $cd) - Lists a directory
Cd(dir) - sets the current directory (same as cmd''s cd)
CmdPad("comand"&$variable) - executes a CMD DOS command

 

 

source code now available

#NoTrayIcon
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=..\..\..\..\Desktop\Autoit CMD.exe
#AutoIt3Wrapper_Res_Description=Command Line Interpreter for Autoir3
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Sycam Inc
#AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable
#AutoIt3Wrapper_Run_AU3Check=n
#AutoIt3Wrapper_Run_Tidy=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
;#AutoCMD.au3#==================================
;File Name.......:AutoCMD.au3
;Creator.........:sean.campbell7
;Created with....:Created with ISN AutoIt Studio
;Version.........:0.95 BETA
;=============================================
#include <console.au3>
#include <array.au3>
#include <file.au3>
#include <string.au3>
Local $CharSet = "qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_"
Assign("$cd", @UserProfileDir, 2)
Cout('Welcome to the Autoit Command line interpreter' & @LF)
While 1
    _CMD()
WEnd

Func _CMD()
    Local $cmd
    Cout(">>")
    Cin($cmd)
    $exe = DoCmd($cmd)
    If $exe = '' Then
        $exe = "Null"
    ElseIf StringInStr($exe, "-ret") Then
        Return Cout(StringReplace($exe, "-ret", ''))
    EndIf
    Cout('Ret:' & $exe & @LF)
EndFunc   ;==>_CMD

Func DoCmd($cmd)
    If StringLeft($cmd, 1) = "$" Then
        $var = StringLeft($cmd, StringInStr($cmd, "=") - 1)
        $icmd = StringReplace(StringTrimLeft($cmd, StringInStr($cmd, "=")), " ", '')
        $exe = _Execute($icmd)
        Assign(StringReplace($var, ' ', ''), $exe, 2)
        Return $exe
    ElseIf $cmd = "exit" Then
        Exit
    Else
        Return _Execute($cmd)
    EndIf
EndFunc   ;==>DoCmd

Func About()
    $ret = "Name....: Autoit Console" & @LF & _
            "Creator.: Sycam Inc (sean Campbell)" & @LF & _
            "Version.: 1.1" & @LF & _
            "About...: Command line interpreter For AutoIt3-ret" & @LF
    Return $ret
EndFunc   ;==>About

Func _Execute($icmd)
    Local $cmd = $icmd
    Local $varpos[1][2]
    Local $vars[1]
    Local $str_3[1][2]
    $str_1 = _StringGetSub($cmd, '"')
    For $i = 0 To UBound($str_1) - 1
        If $str_1[$i] <> '' Then
            $rep = _StringRepeat(';', StringLen($str_1[$i]))
            $cmd = StringReplace($cmd, '"' & $str_1[$i] & '"', $rep)
            ReDim $str_3[UBound($str_3) + 1][2]
            $str_3[UBound($str_3) - 1][0] = $rep
            $str_3[UBound($str_3) - 1][1] = '"' & $str_1[$i] & '"'
        EndIf
    Next
    $str_2 = _StringGetSub($cmd, "'")
    For $i = 0 To UBound($str_2) - 1
        If $str_2[$i] <> '' Then
            $rep = _StringRepeat(';', StringLen($str_2[$i]))
            $cmd = StringReplace($cmd, "'" & $str_2[$i] & "'", $rep)
            ReDim $str_3[UBound($str_3) + 1][2]
            $str_3[UBound($str_3) - 1][0] = $rep
            $str_3[UBound($str_3) - 1][1] = "'" & $str_2[$i] & "'"
        EndIf
    Next
    For $i = 1 To _StringGetOccurances($cmd, "$")
        $chars = StringMid($cmd, StringInStr($cmd, "$", 0, $i) + 1)
        ReDim $vars[UBound($vars) + 1]
        $vars[UBound($vars) - 1] = "$"
        For $x = 1 To StringLen($chars)
            $chr = StringMid($chars, $x, 1)
            If StringInStr($CharSet, $chr) Then
                $vars[UBound($vars) - 1] &= $chr
            Else
                ExitLoop
            EndIf
        Next
    Next
    For $i = 1 To UBound($vars) - 1
        $cmd = StringReplace($cmd, $vars[$i], &"'" Eval($vars[$i]) & "'")
    Next
    Local $x = 0
    For $i = 1 To UBound($str_3) - 1
        Do
            $x += 1
            $cmd = StringReplace($cmd, $str_3[$i][0], $str_3[$i][1], 0, $x)
        Until $x >= UBound($str_3) - 1
    Next
    Return Execute($cmd)
EndFunc   ;==>_Execute

Func CmdPad($icmd)
    Local $cmd = StringReplace($icmd, "'", '"')
    Local $varpos[1][2]
    Local $vars[1]
    Local $str_3[1][2]
    $str_1 = _StringGetSub($cmd, '"')
    For $i = 0 To UBound($str_1) - 1
        If $str_1[$i] <> '' Then
            $rep = _StringRepeat(';', StringLen($str_1[$i]))
            $cmd = StringReplace($cmd, '"' & $str_1[$i] & '"', $rep)
            ReDim $str_3[UBound($str_3) + 1][2]
            $str_3[UBound($str_3) - 1][0] = $rep
            $str_3[UBound($str_3) - 1][1] = '"' & $str_1[$i] & '"'
        EndIf
    Next
    $str_2 = _StringGetSub($cmd, "'")
    For $i = 0 To UBound($str_2) - 1
        If $str_2[$i] <> '' Then
            $rep = _StringRepeat(';', StringLen($str_2[$i]))
            $cmd = StringReplace($cmd, "'" & $str_2[$i] & "'", $rep)
            ReDim $str_3[UBound($str_3) + 1][2]
            $str_3[UBound($str_3) - 1][0] = $rep
            $str_3[UBound($str_3) - 1][1] = "'" & $str_2[$i] & "'"
        EndIf
    Next
    For $i = 1 To _StringGetOccurances($cmd, "$")
        $chars = StringMid($cmd, StringInStr($cmd, "$", 0, $i) + 1)
        ReDim $vars[UBound($vars) + 1]
        $vars[UBound($vars) - 1] = "$"
        For $x = 1 To StringLen($chars)
            $chr = StringMid($chars, $x, 1)
            If StringInStr($CharSet, $chr) Then
                $vars[UBound($vars) - 1] &= $chr
            Else
                ExitLoop
            EndIf
        Next
    Next
    For $i = 1 To UBound($vars) - 1
        $cmd = StringReplace($cmd, $vars[$i], &"'" Eval($vars[$i]) & "'")
    Next
    Local $x = 0
    For $i = 1 To UBound($str_3) - 1
        Do
            $x += 1
            $cmd = StringReplace($cmd, $str_3[$i][0], $str_3[$i][1], 0, $x)
        Until $x = UBound($str_3) - 1
    Next
    system($cmd)
    Return "-ret"
EndFunc   ;==>CmdPad

Func CD($dir = '')
    If FileExists(Eval("$cd") & "\" & $dir) And StringInStr(FileGetAttrib(Eval("$cd") & "\" & $dir), "d") Then
        Assign("$cd", Eval("$cd") & "\" & $dir)
        Return Eval("$cd")
    ElseIf FileExists($dir) And StringInStr(FileGetAttrib($dir), "d") Then
        Assign("$cd", $dir)
        Return Eval("$cd")
    EndIf
    Return Eval('$cd')
EndFunc   ;==>CD

Func Dir($dir = 0, $filter = '*')
    If $dir = '0' Then
        $dir = Eval("$cd")
    EndIf

    $a = _FileListToArray($dir, $filter)
    Cout($dir & @LF)
    For $i = 1 To UBound($a) - 1
        Sleep(10)
        Cout(@TAB & "|- " & $a[$i] & @TAB & FileGetAttrib($dir & "\" & $a[$i]) & @LF)
    Next
    Return "-ret"
EndFunc   ;==>Dir

Func Repeat($Func, $times = 1)
    Local $tz
    For $i = 0 To $times - 1
        $tz &= DoCmd($Func) & @LF
    Next
    Return StringTrimRight($tz, 1) & @LF & "-ret";remove last line feed
EndFunc   ;==>Repeat

Func Echo($text)
    Cout($text & @LF)
    Return "-ret"
EndFunc   ;==>Echo


Func NSLookUp($ip)
    RunWait(@SystemDir & '\NSLookUp.exe "' & $ip & '"')
    Return ' '
EndFunc   ;==>NSLookUp

Func RunSelf()
    If @Compiled Then
        Return Run(@ScriptFullPath)
    Else
        Return Run(@AutoItExe & ' "' & @ScriptFullPath & '"')
    EndIf
EndFunc   ;==>RunSelf


Func _StringGetPos($string, $iStart, $iEnd)
    Return StringLeft(StringTrimLeft($string, $iStart), $iEnd)
EndFunc   ;==>_StringGetPos

Func _StringReplacePos($string, $iStart, $iEnd, $value)
    $st = StringMid($string, 0, $iStart)
    $en = StringMid($string, $iEnd)
    Return $st & $value & $en
EndFunc   ;==>_StringReplacePos

Func _StringGetSub($string, $iDelim = '"')
    Local $ret[1]
    Local $i = 1, $l
    Do
        $l = StringTrimLeft($string, StringInStr($string, $iDelim, 0, $i))
        $l = StringLeft($l, StringInStr($l, $iDelim) - 1)
        $i += 2
        ReDim $ret[UBound($ret) + 1]
        $ret[UBound($ret) - 1] = $l
    Until $i >= _StringGetOccurances($string, $iDelim)
    _ArrayDelete($ret, 0)
    Return $ret
EndFunc   ;==>_StringGetSub

Func _StringGetOccurances($string, $iDelim)
    $lo = StringSplit($string, $iDelim)
    Return $lo[0]
EndFunc   ;==>_StringGetOccurances

Func Help()
    $ret = 'This is the Autoit Command line interpreter it has most of the standart AutoIt3 commands.' & @LF & _
            "however the following functions  don't work:" & @LF & _
            'tcpaccept' & @LF & _
            'tcpclosesocket' & @LF & _
            'tcpconnect' & @LF & _
            'tcplisten' & @LF & _
            'tcpnametoip - however there is NSLookUp' & @LF & _
            'tcprecv' & @LF & _
            'tcpsend' & @LF & _
            'tcpshutdown' & @LF & _
            'tcpstartup' & @LF & _
            'DllStructCreate' & @LF & _
            'DllStructGetData' & @LF & _
            'DllStructGetSize' & @LF & _
            'DllStructGetSize' & @LF & _
            'DllStructSetData' & @LF & _
            'And anything that uses an Array' & @LF & _
            'For further help go to www.autoitscript.com' & @LF & _
            'the command line version of autoit dose have some extra commands such as' & @LF & _
            'Repeat("command",times) - will Repeat any command' & @LF & _
            'RunSelf() - open a new instance of Autoit Command line interpreter' & @LF & _
            'Echo("text") - Prints text to console. however putting somthing as a string will do the same' & @LF & _
            'About() - prints information about Autoit Command line interpreter' & @LF & _
            'Clear() - Clears Autoit Command line interpreter' & @LF & _
            'Dir(dir = $cd) - Lists a directory' & @LF & _
            'Cd(dir) - sets the current directory (same as cmd''s cd)' & @LF & _
            'CmdPad("comand"&$variable) - executes a CMD DOS command' & @LF & _
            'For further help go to www.autoitscript.com' & @LF & _
            "Autoit Command line interpreter is baced on Sycam Inc's _Execute function-ret" & @LF
    Return $ret
EndFunc   ;==>Help

Func Clear() ;clears termanal
    system("cls")
    Return "-ret"
EndFunc   ;==>Clear

i would add screen shots but the forums don't like embedded images from Google drive

Autoit CMD.zip

Edited by sycam0inc

All my projects live on github

Share this post


Link to post
Share on other sites

A very nice idea but I'm not sure I can test it without checking the source code,I'll be waiting, thank you.

Share this post


Link to post
Share on other sites

Added Source Code And Updated to Version 1.1

Chanellog

 

Added :

 - CD

 - Dir

 - RunSelf

 - echo

 - Clear

 - CmdPad

Removed :

 - Ping (Cmd Version)(Not Needed)


All my projects live on github

Share this post


Link to post
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
Sign in to follow this  
Followers 0

  • Similar Content

    • Simpel
      By Simpel
      Hi.
      Thanks to this post (https://www.autoitscript.com/forum/topic/189553-writing-to-cmd/?do=findComment&comment=1361142) I can now write a helpfile to the cmd when for instance passing parameter -h or -help at cmd. But then cmd is blocked by the script (I had to free it with CTRL+BREAK):
      #include <WinAPI.au3> _WinAPI_AttachConsole() $hConsole = _WinAPI_GetStdHandle(1) _WinAPI_WriteConsole($hConsole, "Print helpfile................" & @CRLF) Inside MSDN Library then I found this sentence: A process can use the FreeConsole function to detach itself from its console.
      But I don't find something like _WinAPI_FreeConsole(). How can I do it in another way?
      Regards, Conrad
    • TheAutomator
      By TheAutomator
      A fullscreen console with custom commands!

      Introduction:
      Hi everyone!
      This funny project started as a question in the help section:
      https://www.autoitscript.com/forum/topic/174404-edit-detect-key-before-updating-content/
      I'd like to share this script with everyone that is interested. 
       
      Why would I want it?
      You like the old style fullscreen console (like in the old day's), You can add custom commands, You can customize the font a lot more compared to cmd.exe, You can share ideas or add tweaks to the script.  
      Still to do:
      Write a simple custom programming language to implement this tool. Writing a little help file / pdf to describe my little programming language. Add little sound effects like a beep if there is a syntax error (optional). Clean up and modify Console.Au3 content. Add an option to have to type a login password (optional). Make an optional installer that also gives scripts for this tool a custom icon and open with command. ...Call Neo?  
      Thanks to:
      xxaviarxx: debugging, some ideas. jguinch: debugging, adding a bunch of tweaks and ideas. kylomas: debugging, new ideas.  
      Edits and updates:
      Added usage of tab key in edit control Edit has focus now on startup I'm currently rewriting a simple custom programming language to implement this tool.  
      UDF download: Console.au3
       
      Regards
      TheAutomator
    • rkr
      By rkr
      Hi, I have a software which has a 'run file'-ie; when i double click on that file, the input file of the software is run by the software. I wish to double click/execute this run file using autoit. how do i achieve this. i opened the software and it shows the input file and run file in same folder, i will put my autoitscript file too in same location. how do i simulate double clicking the run file (using its file name, say - abc.run ). I entered the following lines to make software window active - it became active, dont know how to go forward
      Winactivate("program title")
      winwaitactivate("program title")
      controlclick("program title","abc.run",1000,"primary",2) ; 1000 is ctrl id
    • SchneiMi
      By SchneiMi
      Hello,
      following my previous question, I have moved all potentially instable object interactions into Executes. But it Looks like "="-assignments to object Attributes cannot be done with Execute, only method calls. Using an "$obj = 1" construct, it compares (Eval) instead of sets (Execute) the value.
      I have tested multiple different combinations, using Execute and Assign, but it seems not to work with object Attributes. :-(
      Gives following Output:
      The assign Action using apply (a3) Fails, while assigning it directly, without Assign() works fine.
      The execute versions compare and do not assign, in both cases. Though, the "Execute" topic in the help file says it executes, not evaluates.
      I have found a similar, old thread, which explains this behavious but does not give a solution. https://www.autoitscript.com/forum/topic/110228-pass-object-property-as-a-variable/  
      Is there a way to assign to a com object's Attribute? Or is there anything new to this unexpected behaviour of Execute (at least compared to the help file description and Python's exec).
       
      Any help is appreciated, and thank you for all the help so far.
      Regards, Michael
       
    • hcI
      By hcI
      Hello I would like to know if there is a way to return a sentence in cmd when I launch from it (because I add arguments).
      For example, diskpart.exe which help to manage the key and hdd connected, when you launch it with the parameter "/f" the app return a sentence saying that it don't recognize the parameter "/f" and it return the sentence in the cmd where i started the application, not a new one.
      That's what I want to do but I couldn't find anything that would solve my problem on internet and on AutoIt like ConsoleWrite / ConsoleWriteError (don't work).
       
      Thanks