| Server IP : 180.180.241.3 / Your IP : 216.73.216.25 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Program Files (x86)/WinSCP/Extensions/ |
Upload File : |
# @name Batch &Rename...
# @command powershell.exe -ExecutionPolicy Bypass -File "%EXTENSION_PATH%" ^
# -sessionUrl "!S" -remotePath "!/" -pattern "%Pattern%" ^
# -replacement "%Replacement%" -pause -sessionLogPath "%SessionLogPath%" ^
# %PreviewMode% !&
# @description Renames remote files using a regular expression
# @flag RemoteFiles
# @version 4
# @homepage https://winscp.net/eng/docs/library_example_advanced_rename
# @require WinSCP 5.13
# @option - -run group "Rename"
# @option Pattern -run textbox "Replace file name part matching this pattern:"
# @option Replacement -run textbox "with:"
# @option - -run -config group "Options"
# @option PreviewMode -run -config checkbox "&Preview changes" "-previewMode" ^
# "-previewMode"
# @option - -config group "Logging"
# @option SessionLogPath -config sessionlogfile
# @optionspage https://winscp.net/eng/docs/library_example_advanced_rename#options
param (
# Use Generate Session URL function to obtain a value for -sessionUrl parameter.
$sessionUrl = "sftp://user:mypassword;fingerprint=ssh-rsa-xx-xx-xx@example.com/",
[Parameter(Mandatory = $True)]
$remotePath,
[Parameter(Mandatory = $True)]
$pattern,
$replacement,
[Switch]
$pause,
$sessionLogPath = $Null,
[Switch]
$previewMode,
[Parameter(Mandatory = $True, ValueFromRemainingArguments = $True, Position = 0)]
$files
)
try
{
if ($previewMode)
{
$anyChange = $False
foreach ($file in $files)
{
$newName = $file -replace $pattern, $replacement
Write-Host "$file => $newName"
if ($newName -ne $file)
{
$anyChange = $True
}
}
Write-Host
if (!$anyChange)
{
Write-Host "No change to be made"
$continue = $False
}
else
{
Write-Host -NoNewline "Continue? y/N "
$key = [System.Console]::ReadKey()
Write-Host
Write-Host
$continue = ($key.KeyChar -eq "y")
if (!$continue)
{
$pause = $False
}
}
}
else
{
$continue = $True
}
if (!$continue)
{
$result = 1
}
else
{
# Load WinSCP .NET assembly
$assemblyPath = if ($env:WINSCP_PATH) { $env:WINSCP_PATH } else { $PSScriptRoot }
Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl($sessionUrl)
$session = New-Object WinSCP.Session
try
{
$session.SessionLogPath = $sessionLogPath
# Connect
$session.Open($sessionOptions)
foreach ($file in $files)
{
$newName = $file -replace $pattern, $replacement
Write-Host "$file => $newName"
$fullName = [WinSCP.RemotePath]::CombinePaths($remotePath, $file)
$fullNewName = [WinSCP.RemotePath]::CombinePaths($remotePath, $newName)
$session.MoveFile($fullName, $fullNewName)
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
& "$env:WINSCP_PATH\WinSCP.exe" "$sessionUrl" /refresh "$remotePath"
}
$result = 0
}
catch
{
Write-Host "Error: $($_.Exception.Message)"
$result = 1
}
if ($pause)
{
Write-Host "Press any key to exit..."
[System.Console]::ReadKey() | Out-Null
}
exit $result