Powershell使用C#实现缩写路径

支持2.0及以后版本。

某些时候报表中的路径字符串是非常长的。如果需要你也可以缩写它,但是这样路径就失去的使用价值。最好是使用内置的API它可以灵活的缩略路径。

接下来要告诉你如何在Powershell脚本中使用C#代码:

代码如下:

$newType = @'
using System;
using System.Text;
using System.Runtime.InteropServices;
 
namespace WindowsAPILib
{
    public class Helper
    {
        [DllImport("shlwapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern bool PathCompactPathEx(System.Text.StringBuilder pszOut, string pszSrc, Int32 cchMax, Int32 dwFlags);
 
        public static string CompactPath(string Path, int DesiredLength)
        {
            StringBuilder sb = new StringBuilder(260);
            if (PathCompactPathEx(sb, Path, DesiredLength + 1, 0))
            { return sb.ToString(); }
            else
            { return Path; }
        }
    }
}
'@
 
Add-Type -TypeDefinition $newType

一旦你执行这段代码,就会产生一个新的.Net类,其中会增加一个新的静态方法“CompactPath”,现在你就可以这样使用它了:

代码如下:

PS> $pshome
C:\Windows\System32\WindowsPowerShell\v1.0

PS> [WindowsAPILib.Helper]::CompactPath($pshome, 12)
C:\W...\v1.0

PS> [WindowsAPILib.Helper]::CompactPath($pshome, 18)
C:\Windows...\v1.0

PS> [WindowsAPILib.Helper]::CompactPath($pshome, 22)
C:\Windows\Sys...\v1.0

(0)

相关推荐

  • Powershell使用C#实现缩写路径

    支持2.0及以后版本. 某些时候报表中的路径字符串是非常长的.如果需要你也可以缩写它,但是这样路径就失去的使用价值.最好是使用内置的API它可以灵活的缩略路径. 接下来要告诉你如何在Powershell脚本中使用C#代码: 复制代码 代码如下: $newType = @' using System; using System.Text; using System.Runtime.InteropServices;   namespace WindowsAPILib {     public cla

  • Powershell读取本机注册表中的所有软件关联扩展名

    适用于所有版本. 下面代码输出极为密集,这段代码能从注册表获取所有软件的关联扩展名. 复制代码 代码如下: Get-ItemProperty Registry::HKCR\.* |   Select-Object -Property PSChildName, '(default)', ContentType, PerceivedType 注意搭配命令使用:这里Get-ItemProperty使用用了"Registry::"方法替代了Powershell原注册表驱动路径,这种方法你可以使

  • PowerShell的基本使用方法

    目录 什么是powershell 1.   如何启动PowerShell 2.   如何运行程序.脚本和已有的软件 3.   运行PowerShell命令 4.   如何查找指定命令以及命令详情 5.   如何在外部调用PowerShell脚本 6.   如何获知最后执行命令的状态 7.   如何计算命令执行时间 8.   了解命令的别名 9.   如何操作使用管理控制台历史命令 10. 如何重定向输出 11. 如何记录PowerShell会话全文 12. 如何显示对象属性为列表或表格 13.

  • 使用Go添加HTTPS的实现代码示例

    简介 现在的网站没有 HTTPS 都不好意思见人了. 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS:常称为 HTTP over TLS.HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议.HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包.HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性.这个协议由网景公司(Netscap

  • .NET 6 从0到1使用Docker部署至Linux环境超详细教程

    目录 前言 环境准备 .NET Core项目准备 1.首先我们先创建一个空的ASP.NET Core Web应用 2.我们可以先在本地将项目构建成镜像看看效果 3.接下来我们将镜像run起来,构造出一个容器: Linux环境配置: 1.配置yum 更新yum包 安装yum-utils 用来管理yum源 查看资源库中有没有安装过的docker rpm包 2.安装docker 3.启动docker 4.安装.NetCore SDK 6.0 安装包配置 执行安装 验证安装环境 调整Dockerfile

  • PowerShell小技巧之观察UNC路径

    许多命令能支持UNC路径,但是UNC路径在脚本中看起来很奇怪.看看下面代码: PS> Test-Path -Path \\127.0.0.1\c$ True 它返回了真,证明UNC路径存在.接着改变当前的路径指向一个非文件系统路径接着测试: PS> cd hkcu:\ PS> Test-Path -Path \\127.0.0.1\c$ False 一样的路径但现在却获得了失败.这是因为UNC路径没有包含盘符,而PS需要根据盘符去分配当前合适位置.如果当前路径没有包含在磁盘路径下,Pow

  • PowerShell中使用通配符匹配文件路径的例子

    星号(*)在DOS的时代,就是通配符(英文叫Wildcard)的代表.从DOS到Windows,再到PowerShell,星号一如既往的坚守在通配符的岗位上. 简单看个例子: 复制代码 代码如下: PS [zhanghong] >dir d:\*.vbs    目录: D:\ Mode                LastWriteTime     Length Name ----                -------------     ------ ---- -a---      

  • PowerShell中把相对路径转换为绝对路径的2个方法

    在PowerShell中,有时候,我们需要把当前的相对路径解析为绝对路径,比如".\test.txt",我们想知道它的绝对路径的话,我们有两种方法可以实现. 1.有一个cmd-let,它叫Resolve-Path. 语法如下: 复制代码 代码如下: Resolve-Path <相对路径> 如果指定的相对路径的文件或文件夹,不存在,则将提示如下: 复制代码 代码如下: PS C:\Users\zhanghong> Resolve-Path .\test.txt Reso

  • PowerShell中获取当前运行脚本路径的方法

    在运行脚本的时候,有时候需要通过脚本文件所在位置的相对路径来做一些事,比如执行另一个脚本.以前在CMD时代,可以通过%~dp0来获取脚本所在的文件夹,那在PowerShell中要怎么做呢? 很简单,通过内置的$MyInvocation变量: 复制代码 代码如下: $x = $MyInvocation.MyCommand.Definition 此时$x的值是当前运行中的脚本的绝对路径,再用Split-Path取它的父路径就可以了: 复制代码 代码如下: $x = Split-Path -Paren

  • PowerShell中使用Test-Path命令检查文件或文件夹路径是否存在示例

    检查文件或文件夹路径是否存在,在编程中是经常用到的功能.PowerShell对于这个需求提供了一个非常便捷的cmdlet,那就是Test-Path!呵呵,看个名字,你就明白它有多么专业了.看看关于它的基本介绍先: Test-Path,检查路径是否存在. 语法:Test-Path <路径> 说明:这里的路径可以是:文件.文件夹.HKLM路径.环境变量env:路径 下面来举一些例子,让大家更方便懂: 复制代码 代码如下: Test-Path D:\q.txt Test-Path C:\Script

随机推荐