Jump to content

Recommended Posts

Posted (edited)

I just made new UDF.
This is an UDF wrapper for windows subst command (Associates a path with a drive letter).

Here are  examples:

#include <AutoItConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include "SubstWrapper.au3"

_Subst_Example1()
;~ _Subst_Example2()

Func _Subst_Example1()
    _Subst_SetCallback(ConsoleWrite)

    ; Generate LONG FILE NAME
    Local $sFileName = ''
    For $i = 1 To 25
        $sFileName &= '1234567890'
    Next
    $sFileName = $sFileName & '.au3'

    Local $sDestDir = StringLeft(@WindowsDir, 1) & ':\Subst_testing' ; usually C:\Subst_testing
    Local $sDest = $sDestDir & '\' & $sFileName
    MsgBox($MB_OK, _
            StringLen($sFileName) & ' ' & StringLen($sDest), _
            FileCopy(@ScriptFullPath, $sDest, $FC_CREATEPATH + $FC_OVERWRITE) _
            )

    ; Of course according to: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
    ; To specify an extended-length path, use the "\\?\" prefix. For example, "\\?\D:\very long path".
    ;
    ; I could use
    ;       FileCopy(@ScriptFullPath, "\\?\" & $sDest, $FC_CREATEPATH + $FC_OVERWRITE)
    ;
    ; but for showing how SubstWrapper.au3 works I will not add "\\?\"  prefix

    Local $sDrive = 'r'
    $sDest = $sDrive & ':\' & $sFileName
    DirCreate($sDestDir)

    ; Associates a path with a drive letter.
    _Subst_Add($sDrive, $sDestDir)
    If @error Then MsgBox($MB_ICONERROR, '_Subst_Add', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

    ShellExecute($sDrive & ':')

    MsgBox($MB_OK, _
            StringLen($sFileName) & ' ' & StringLen($sDest), _
            FileCopy(@ScriptFullPath, $sDest, $FC_OVERWRITE) _
            )

    MsgBox($MB_OK, 'Waiting', _
            'Check the content of ' & $sDrive & ':' & @CRLF & _
            'When you Click "OK" button the ' & $sDrive & ': will be Deleted ' & @CRLF & _
            'REMARK: Content should be save - not deleted' _
            )

    ; Deletes a substituted (virtual) drive.
    _Subst_Del($sDrive)
    If @error Then MsgBox($MB_ICONERROR, '_Subst_Del', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

EndFunc   ;==>_Subst_Example1

Func _Subst_Example2()
    _Subst_SetCallback(ConsoleWrite)

    ; set drive letter with out colon and backspace
    Local $sDrive = 's'

    ; Associates a path with a drive letter.
    _Subst_Add($sDrive, @WorkingDir)
    If @error Then MsgBox($MB_ICONERROR, '_Subst_Add', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

    ; list of current virtual drives
    Local $aResult_outer = _Subst_ListToArray()
    If @error Then MsgBox($MB_ICONERROR, '_Subst_List', '@error = ' & @error & @CRLF & '@extended = ' & @extended)
    Local $aResult_inner
    For $iOuter_idx = 0 To UBound($aResult_outer) - 1
        $aResult_inner = $aResult_outer[$iOuter_idx]
        _ArrayDisplay($aResult_inner, '$aResult_inner[' & $iOuter_idx & ']')
    Next

    ShellExecute($sDrive & ':')

    MsgBox($MB_OK, 'Waiting', _
            'Check the content of ' & $sDrive & ':' & @CRLF & _
            'When you Click "OK" button the ' & $sDrive & ': will be Deleted ' & @CRLF & _
            'REMARK: Content should be save - not deleted' _
            )

    ; Deletes a substituted (virtual) drive.
    _Subst_Del($sDrive)
    If @error Then MsgBox($MB_ICONERROR, '_Subst_Del', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

    ; list of current virtual drives
    _Subst_List()
    If @error Then MsgBox($MB_ICONERROR, '_Subst_List', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

EndFunc   ;==>_Subst_Example2

The second example also works (just uncomment them).

 

You can download it here:

Have fun.

mLipok

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

@mLipok,

i've had a bad past experience with subst when it comes to operations on too long paths. nothing solidly reproducible, but a lot of seemingly-unresolved failures of file operations functions. so i came up with this UDF - have you not noticed it?

 

(which, b.t.w, is listed in the Wiki page of User Defined Functions.)

you might want to give it a try.

 

Signature - my forum contributions:

  Reveal hidden contents

 

Posted (edited)

Yeah, I know that even If I use subst then filename could be larger than 256 chars.
For my purposes temporarily just how to use the prefix in one function.
But it's quite possible that in the future I would use your UDF.

This SubstWrapper was an idea that did not work out, but I decided to finish it, I hope that with the benefit for the community.

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

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
×
×
  • Create New...