Jump to content

Parse a file's path...


Recommended Posts

I feel like a newb all over again, it's fun getting back into autoit, but... now I'm all newb-ish all over again.

What I want to do is prepend "[iRLARD] " to the begining of a file name. I know I'm doing it wrong now, the output now would be "[iRLARD] c:\path\pic.jpg" I want it to be "c:\path\[iRLARD] pic.jpg"

this was supposed to be fast and easy....

if $CmdLine[0] = 1 Then
    FileCopy( $CmdLine[1], "[IRLARD] "& $CmdLine[1])
Else
    MsgBox(0,"[IRLARD] It!", "IRLARD it will prepend [IRLARD] to a file that is dropped on the EXE or run as a command ie: ""[irlard] it.exe"" pic.jpg will copy pic.jpg to ""[IRLARD] pic.jpg""")
EndIf

So, I swear there used to be an UDF that would break a path into an array for use of it's part, but I can't find it now... I think Valik or Larry wrote it... Does anyone remember it, or have it?

Thanks!

P.S. Hi everyone!

"I'm not even supposed to be here today!" -Dante (Hicks)

Link to comment
Share on other sites

  • Moderators

I feel like a newb all over again, it's fun getting back into autoit, but... now I'm all newb-ish all over again.

What I want to do is prepend "[iRLARD] " to the begining of a file name. I know I'm doing it wrong now, the output now would be "[iRLARD] c:\path\pic.jpg" I want it to be "c:\path\[iRLARD] pic.jpg"

this was supposed to be fast and easy....

if $CmdLine[0] = 1 Then
    FileCopy( $CmdLine[1], "[IRLARD] "& $CmdLine[1])
Else
    MsgBox(0,"[IRLARD] It!", "IRLARD it will prepend [IRLARD] to a file that is dropped on the EXE or run as a command ie: ""[irlard] it.exe"" pic.jpg will copy pic.jpg to ""[IRLARD] pic.jpg""")
EndIf

So, I swear there used to be an UDF that would break a path into an array for use of it's part, but I can't find it now... I think Valik or Larry wrote it... Does anyone remember it, or have it?

Thanks!

P.S. Hi everyone!

Hi Emmanuel, take a look at the Beta and _PathSplit() in the Beta Help, that will do what you want.

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Link to comment
Share on other sites

Wow, 2 years since I've been active and its still in the beta ...

Thanks, I'll check it out from home, even though I got it with some simple string work. Will post my fixed code.

"I'm not even supposed to be here today!" -Dante (Hicks)

Link to comment
Share on other sites

Wow, 2 years since I've been active and its still in the beta ...

Thanks, I'll check it out from home, even though I got it with some simple string work. Will post my fixed code.

The ref variable for the directory and array [2] generated by _PathSplit() still has the entire directory portion in one element, so you might want to further break it down with StringSplit():

#include <file.au3>
#include <array.au3>

Dim $sSplitDrv, $sSplitDir, $sSplitFile, $sSplitExt
$TestPath = "C:\MyDir\MySubDir\MySub-SubDir\MyFile.ext"
$aSplitPath = _PathSplit($TestPath, $sSplitDrv, $sSplitDir, $sSplitFile, $sSplitExt)
_ArrayDisplay($aSplitPath, "_PathSplit() Results")
$aSplitDir = StringSplit($sSplitDir, "\")
_ArrayDisplay($aSplitDir, "StringSplit() Results")oÝ÷ Øô·«y§bazâ)Ú{*.)'hmqªÞiº.¶ÊeÛbayØ«yËh¯*h®Ø¨­Êj{-Y]¢+pØh¶¸§*e×ë¢cë¡Ö§vz"Énuíý²'ò¢ç^²*Þjëh×6$TestPath = "C:\MyDir\MySubDir\MySub-SubDir\MyFile.ext"
$aSplitPath = StringSplit($TestPath, "\")
$aSplitPath[$aSplitPath[0]] = "[IRLARD] " & $aSplitPath[$aSplitPath[0]]
$NewPath = $aSplitPath[1]
For $n = 2 To $aSplitPath[0]
     $NewPath = $NewPath & "\" & $aSplitPath[$n]
Next
MsgBox(64, "Results", "Input $TestPath = " & $TestPath & @CRLF & _
          "Output $NewPath = " & $NewPath)
Edited by PsaltyDS
Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
Link to comment
Share on other sites

P.S. On re-reading the original I see you likely don't care about splitting the directory portion. But you can still do it with only StringSplit() from Prod, and no #include's, if you desire:

Coolness, pretty different from what I did.

Here's what I'd figured out while sitting at the bus stop on my laptop offline:

if $CmdLine[0] = 1 Then
    $sFullPath = $CmdLine[1]
    $iLastWhack = StringInStr($sFullPath,"\",0,-1)
    $sPath = StringLeft($sFullPath,$iLastWhack)
    $sFileNameLen = StringLen($sFullPath) - StringLen($sPath)
    $sFileName = StringRight($sFullPath, $sFileNameLen)
    ;MsgBox (0,"",$sPath & @CR & $sFileName)
    if MsgBox(1, "[IRLARD] It!", "Copying """ & $sFullPath & '"' & @cr & 'to: "' &  $sPath & "[IRLARD] " & $sFileName & @crlf& _
        "Go post it like a retard!",2) = 2 Then
        Exit(1)
    EndIf
    FileCopy( $sFullPath, $sPath & "[IRLARD] " & $sFileName)
    
Else
    MsgBox(0,"[IRLARD] It!", "IRLARD it will prepend [IRLARD] to a file that is dropped on the EXE or run as a command ie: ""[irlard] it.exe"" pic.jpg will copy pic.jpg to ""[IRLARD] pic.jpg""")
EndIf

Now, if I wanted to update it so that if someone dropped a bunch of files on there, all I'd have to do is do a for loop, for as many as $CmdLine[0] to do the same thing for each one, right?

Edited by emmanuel

"I'm not even supposed to be here today!" -Dante (Hicks)

Link to comment
Share on other sites

Now, if I wanted to update it so that if someone dropped a bunch of files on there, all I'd have to do is do a for loop, for as many as $CmdLine[0] to do the same thing for each one, right?

Hi emmanuel, it has sure been awhile.

I did not scutinize your code but only adapted to your Cmdline request. Yes, that is the technique

if $CmdLine[0] Then
    For $i = 1 To $CmdLine[0]
        $sFullPath = $CmdLine[$i]
        $iLastWhack = StringInStr($sFullPath,"\",0,-1)
        $sPath = StringLeft($sFullPath,$iLastWhack)
        $sFileNameLen = StringLen($sFullPath) - StringLen($sPath)
        $sFileName = StringRight($sFullPath, $sFileNameLen)
        ;MsgBox (0,"",$sPath & @CR & $sFileName)
        if MsgBox(1, "[IRLARD] It!", "Copying """ & $sFullPath & '"' & @cr & 'to: "' &  $sPath & "[IRLARD] " & $sFileName & @crlf& _
            "Go post it like a retard!",2) = 2 Then
            Exit(1)
        EndIf
        FileCopy( $sFullPath, $sPath & "[IRLARD] " & $sFileName)
    Next
Else
    MsgBox(0,"[IRLARD] It!", "IRLARD it will prepend [IRLARD] to a file that is dropped on the EXE or run as a command ie: ""[irlard] it.exe"" pic.jpg will copy pic.jpg to ""[IRLARD] pic.jpg""")
EndIf

:D

Link to comment
Share on other sites

That did the trick, thanks MHz!

Hi emmanuel, it has sure been awhile.

I did not scutinize your code but only adapted to your Cmdline request. Yes, that is the technique

:D

I think I'll be around more often as I take a more blended approach to scripting and packaging apps...

"I'm not even supposed to be here today!" -Dante (Hicks)

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...