Topic "unable to delete a directory with square brackets in name"

Author Message
dbuddrige
[View user's profile]

Joined: 2014-02-25
Posts: 2
Hi all,

I am trying to write a Powershell script that automatically deletes empty directories on our ftp server. I don't have any direct access to the server on which the directories reside - I can only access them via ftp. For this reason, I have written a powershell script that uses winscp to (try to) delete the empty directories.

However, I have a problem, in that many of the directories on the server have square brackets in the directory name.

For example, the directory name might be called:

[a]153432

There are lots of these directories, hence my desire to write a script to delete them.

This occurs because they've been created by a program that uses a number to create the directories it requires.

In order to work on this program, I created an empty directory

/latest/[b]test

My program goes like this:


<PROGRAM>

# program to test deletion of directories with square-brackets in the name.

$HOSTNAME="myftpservername"
$USERNAME="myftpusername"
$PASSWORD="myftppassword"
$DLL_LOCATION="C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
$LOCAL_DIRECTORY="C:\testdir\extended\baseroot"

# Load WinSCP .NET assembly
[Reflection.Assembly]::LoadFrom($DLL_LOCATION) | Out-Null

# Session.FileTransferred event handler

try
{
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::ftp
$sessionOptions.HostName = $HOSTNAME
$sessionOptions.UserName = $USERNAME
$sessionOptions.Password = $PASSWORD

$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)

$remoteFileWithUnixPath = "/latest/[b]test"

$removalResult = $session.RemoveFiles($remoteFileWithUnixPath)
if ($removalResult.IsSuccess)
{
Write-Host ("Removal of remote file {0} succeeded" -f $remoteFileWithUnixPath)
}
else
{
Write-Host ("Removal of remote file {0} failed" -f $remoteFileWithUnixPath)
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host $_.Exception.Message
exit 1
}

</PROGRAM>

When I run it, it displays the following message:

PS C:\Users\dbuddrige\Documents\dps> .\delete-squarebracket-dir.ps1
Removal of remote file /latest/[b]test succeeded

However, the directory is not deleted.

BUT, if I change the directory name [and the variable $remoteFileWithUnixPath] to something like


/latest/foo

And then re-run the program, it delete's the directory /latest/foo just fine.

Does anyone have any ideas what I need to do to get this to work?

thanks heaps,

David Buddrige
dbuddrige
[View user's profile]

Joined: 2014-02-25
Posts: 2
see

http://stackoverflow.com/questions/22032008/unable-to-delete-a-directory-with-square-brackets-in-name-using-winscp-and-power

The trick was to update the code thus:

From:

Code:
$removalResult = $session.RemoveFiles($remoteFileWithUnixPath)


To:

Code:
$removalResult = $session.RemoveFiles($session.EscapeFileMask($remoteFileWithUnixPath))
Advertisements

You can post new topics in this forum






Search Site

What is WinSCP?

It is award-winning SFTP client, SCP client, FTPS client and FTP client integrated into one software program for file transfer to FTP server or secure SFTP server. [More]

And it's free!

Donate

About donations

$9   $19   $49   $99

About donations

Recommend

WinSCP Privacy Policy

WinSCP License