Jump to content

How to get path and name of a file I right-clicked on?


nekokk
 Share

Recommended Posts

How to get path and name of a file I right-clicked on?

I would like to do something to a file I right-clicked on , I hope the script can know its target is the file be chosen without a given path and name .

e.g

$Path_Name = (a way I need to get the path and name from a file I right-clicked on)

FileCopy($path,"The destination path of the copied file")

So when I want to copy a file , I just need choose it and run my script for copy, of course I will apply it to another way not only for copy, thanks in advance :whistle:

This problem badger me for a long time...

Link to comment
Share on other sites

Why not use FileOpenDialog instead of right clicking.


Time you enjoyed wasting is not wasted time ......T.S. Elliot
Suspense is worse than disappointment................Robert Burns
God help the man who won't help himself, because no-one else will...........My Grandmother

Link to comment
Share on other sites

Why not use FileOpenDialog instead of right clicking.

Because I hope something I want to do can work directly on a file be clicked, no need to give a path or name, only one condition is requirement and the condition is what I chosen, what I clicked on.

thank you for your reply. :whistle:

Link to comment
Share on other sites

How to get path and name of a file I right-clicked on?

To get the path of a file or directory by right-click you will need to modify the following reg keys:

HKEY_CLASSES_ROOT\*\Shell\Your Script Name\Command

HKEY_CLASSES_ROOT\Folder\Shell\Your Script Name\Command

This is a script I use to copy user data from the old computer into the new computer. All I need to do is right click in a folder and select FileCopy - Target, then I just right click into a file or folder that I want to copy and select FileCopy - Source. The script will start copying the select file or folder into the Target folder.

Local $IniFile = @ScriptDir & '\' & StringLeft(@ScriptName, StringInStr(@ScriptName, '.', 0, -1) -1) & '.ini'
Local $DirSource = IniRead($IniFile, 'FileCopy', 'DirSource', '')
Local $FileSource = IniRead($IniFile, 'FileCopy', 'FileSource', '')
Local $Target = IniRead($IniFile, 'FileCopy', 'Target', '')

If $CmdLine[0] <> 0 Then
    For $x = 1 To $CmdLine[0]
        Switch $CmdLine[$x]
            Case '/delreg'
                RegDelete('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Source')
                RegDelete('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Target')
                RegDelete('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Source')
                RegDelete('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Target')               
            Case '/dirsource'
                If $DirSource = '' And $CmdLine[2] <> '' Then
                    IniWrite($IniFile, 'FileCopy', 'DirSource', $CmdLine[2])
                    $DirSource = $CmdLine[2]
                EndIf
                If $Target <> '' And $DirSource <> '' Then
                    _FileCopy($DirSource, $Target)
                    IniWrite($IniFile, 'FileCopy', 'DirSource', '')
                EndIf
            Case '/filesource'              
                If $FileSource = '' And $CmdLine[2] <> '' Then
                    IniWrite($IniFile, 'FileCopy', 'FileSource', $CmdLine[2])
                    $FileSource = $CmdLine[2]
                EndIf
                If $Target <> '' And $FileSource <> '' Then
                    _FileCopy($FileSource, $Target, 0)
                    IniWrite($IniFile, 'FileCopy', 'FileSource', '')
                EndIf
            Case '/target'
                If $Target = '' And $CmdLine[2] <> '' Then
                    IniWrite($IniFile, 'FileCopy', 'Target', $CmdLine[2])
                    $Target = $CmdLine[2]
                EndIf
                If $Target <> '' And $DirSource <> '' Then
                    _FileCopy($DirSource, $Target)
                    IniWrite($IniFile, 'FileCopy', 'DirSource', '')
                ElseIf $Target <> '' And $FileSource <> '' Then
                    _FileCopy($FileSource, $Target, 0)
                    IniWrite($IniFile, 'FileCopy', 'FileSource', '')
                EndIf               
        EndSwitch
    Next
Else
    If IsAdmin() Then
        RegWrite('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Source\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /DirSource "' & '%1"')
        RegWrite('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Target\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /Target "' & '%1"')
        RegWrite('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Source\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /FileSource "' & '%1"')
        RegWrite('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Target\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /Target "' & '%1"')
        FileCopy(@AutoItExe, @WindowsDir & '\' & @ScriptName, 1)
    EndIf
EndIf
Exit

; Flag = 0     Copy file
; Flag = 1     Copy directory

; Return 1     if copy file or copy directory is success
; Return 0     if copy file or copy directory is failure
; Return -1    if answer message NO
Func _FileCopy($sSource, $sTarget, $iFlag = 1)  
    Local $iMsgBoxAnswer, $iret, $sTitle = 'FileCopy'   
    If $iFlag then $sTitle = 'DirCopy'
    $iMsgBoxAnswer = MsgBox(68, $sTitle, "Are you sure, you want to copy?" & @CRLF & @CRLF & "Source: " & $sSource & @CRLF & "Target: " & $sTarget)
    If $iMsgBoxAnswer = 7 Then Return(-1)
    
    If $iFlag Then
        Local $sDirFolder = StringMid($sSource, StringInStr($sSource, '\', 0, -1) + 1)
        ToolTip('DirCopy ' & $sSource & ' To ' & $sTarget & '\' & $sDirFolder, 0, 0, '', 1)
        $iret = DirCopy($sSource, $sTarget & '\' & $sDirFolder, 1)      
    Else
        ToolTip('FileCopy ' & $sSource & ' To ' & $sTarget, 0, 0, '', 1)
        $iret = FileCopy($sSource, $sTarget & '\', 9)
    EndIf
    ToolTip('')
    If Not $iret Then
        If $iFlag Then
            MsgBox(16, $sTitle, "Copying directory " & $sSource & " To " & $sTarget & " fail.")
        Else
            MsgBox(16, $sTitle, "Copying file " & $sSource & " To " & $sTarget & " fail.")
        EndIf
    EndIf
    Return($iret)
EndFunc

Note:

To test this script you will need to compile first. When you run the script the first time I will modify the registry and copy itself into %Windir% folder after this is done all you need to do is right-click.

To remove the registry key run the script with /delreg switch Ex: ScriptName.exe /delreg

I hope this help you....

AutoIt Scripts:NetPrinter - Network Printer UtilityRobocopyGUI - GUI interface for M$ robocopy command line
Link to comment
Share on other sites

To get the path of a file or directory by right-click you will need to modify the following reg keys:

HKEY_CLASSES_ROOT\*\Shell\Your Script Name\Command

HKEY_CLASSES_ROOT\Folder\Shell\Your Script Name\Command

This is a script I use to copy user data from the old computer into the new computer. All I need to do is right click in a folder and select FileCopy - Target, then I just right click into a file or folder that I want to copy and select FileCopy - Source. The script will start copying the select file or folder into the Target folder.

Local $IniFile = @ScriptDir & '\' & StringLeft(@ScriptName, StringInStr(@ScriptName, '.', 0, -1) -1) & '.ini'
Local $DirSource = IniRead($IniFile, 'FileCopy', 'DirSource', '')
Local $FileSource = IniRead($IniFile, 'FileCopy', 'FileSource', '')
Local $Target = IniRead($IniFile, 'FileCopy', 'Target', '')

If $CmdLine[0] <> 0 Then
    For $x = 1 To $CmdLine[0]
        Switch $CmdLine[$x]
            Case '/delreg'
                RegDelete('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Source')
                RegDelete('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Target')
                RegDelete('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Source')
                RegDelete('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Target')               
            Case '/dirsource'
                If $DirSource = '' And $CmdLine[2] <> '' Then
                    IniWrite($IniFile, 'FileCopy', 'DirSource', $CmdLine[2])
                    $DirSource = $CmdLine[2]
                EndIf
                If $Target <> '' And $DirSource <> '' Then
                    _FileCopy($DirSource, $Target)
                    IniWrite($IniFile, 'FileCopy', 'DirSource', '')
                EndIf
            Case '/filesource'              
                If $FileSource = '' And $CmdLine[2] <> '' Then
                    IniWrite($IniFile, 'FileCopy', 'FileSource', $CmdLine[2])
                    $FileSource = $CmdLine[2]
                EndIf
                If $Target <> '' And $FileSource <> '' Then
                    _FileCopy($FileSource, $Target, 0)
                    IniWrite($IniFile, 'FileCopy', 'FileSource', '')
                EndIf
            Case '/target'
                If $Target = '' And $CmdLine[2] <> '' Then
                    IniWrite($IniFile, 'FileCopy', 'Target', $CmdLine[2])
                    $Target = $CmdLine[2]
                EndIf
                If $Target <> '' And $DirSource <> '' Then
                    _FileCopy($DirSource, $Target)
                    IniWrite($IniFile, 'FileCopy', 'DirSource', '')
                ElseIf $Target <> '' And $FileSource <> '' Then
                    _FileCopy($FileSource, $Target, 0)
                    IniWrite($IniFile, 'FileCopy', 'FileSource', '')
                EndIf               
        EndSwitch
    Next
Else
    If IsAdmin() Then
        RegWrite('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Source\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /DirSource "' & '%1"')
        RegWrite('HKEY_CLASSES_ROOT\Folder\Shell\FileCopy - Target\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /Target "' & '%1"')
        RegWrite('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Source\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /FileSource "' & '%1"')
        RegWrite('HKEY_CLASSES_ROOT\*\Shell\FileCopy - Target\Command', '', 'REG_SZ', @WindowsDir & '\' & @ScriptName & ' /Target "' & '%1"')
        FileCopy(@AutoItExe, @WindowsDir & '\' & @ScriptName, 1)
    EndIf
EndIf
Exit

; Flag = 0     Copy file
; Flag = 1     Copy directory

; Return 1     if copy file or copy directory is success
; Return 0     if copy file or copy directory is failure
; Return -1    if answer message NO
Func _FileCopy($sSource, $sTarget, $iFlag = 1)  
    Local $iMsgBoxAnswer, $iret, $sTitle = 'FileCopy'   
    If $iFlag then $sTitle = 'DirCopy'
    $iMsgBoxAnswer = MsgBox(68, $sTitle, "Are you sure, you want to copy?" & @CRLF & @CRLF & "Source: " & $sSource & @CRLF & "Target: " & $sTarget)
    If $iMsgBoxAnswer = 7 Then Return(-1)
    
    If $iFlag Then
        Local $sDirFolder = StringMid($sSource, StringInStr($sSource, '\', 0, -1) + 1)
        ToolTip('DirCopy ' & $sSource & ' To ' & $sTarget & '\' & $sDirFolder, 0, 0, '', 1)
        $iret = DirCopy($sSource, $sTarget & '\' & $sDirFolder, 1)      
    Else
        ToolTip('FileCopy ' & $sSource & ' To ' & $sTarget, 0, 0, '', 1)
        $iret = FileCopy($sSource, $sTarget & '\', 9)
    EndIf
    ToolTip('')
    If Not $iret Then
        If $iFlag Then
            MsgBox(16, $sTitle, "Copying directory " & $sSource & " To " & $sTarget & " fail.")
        Else
            MsgBox(16, $sTitle, "Copying file " & $sSource & " To " & $sTarget & " fail.")
        EndIf
    EndIf
    Return($iret)
EndFunc

Note:

To test this script you will need to compile first. When you run the script the first time I will modify the registry and copy itself into %Windir% folder after this is done all you need to do is right-click.

To remove the registry key run the script with /delreg switch Ex: ScriptName.exe /delreg

I hope this help you....

Thank you very much :whistle: this is helpful!
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...