【问题标题】:Powershell file and directory names as strings, sans decorationsPowershell 文件和目录名称作为字符串,无装饰
【发布时间】:2015-02-11 14:34:33
【问题描述】:

我经常想做这样的事情:

 $foo=ls foo.txt|select FullName
 $bar=$foo.split("\\");  #  or replace or some such

但是如果我现在看一下 bar 中的字符串,它们看起来像这样:

 @{FullName=C:\path\to\foo.txt}

由于我知道装饰的长度,我可以手动获取子字符串。但这似乎很棘手 - 有没有办法将路径部分作为字符串获取?

编辑:根据一些问题说明另一个类似的问题,如果我这样做的话:

 $foo -replace("\\","/")

我明白了:

 @{FullName=C:/src/tss/THSS-Deployment-Config/foo.txt}

我正在对这些文件名进行大量操作,以便在不同的 CM 存储库之间进行迁移。我在想'如果我能把整个路径作为一个字符串'......

这是我第一次认真接触 PS。所以也许我的心态是错误的。

【问题讨论】:

  • 您将对象视为字符串,这在您的情况下不起作用。这就是select -ExpandProperty FullName(gci foo.txt).fullname 的意义所在。您要操作的是具有全名属性的对象,这就是您看到哈希表表示法的原因。

标签: string powershell filenames


【解决方案1】:

一些快速的方法,全部使用Split-Path cmdlet,非常适合:

$foo= ls foo.txt | select FullName
$bar = Split-Path $foo.fullname

或者:

$foo= ls foo.txt | select -ExpandProperty FullName
$bar = Split-Path $foo

甚至更短:

$bar = Split-Path (gci foo.txt).fullname

【讨论】:

    【解决方案2】:

    @arco444 给了我丢失的部分。要获取文件名作为字符串的完整路径,我能想到的最简单的方法是:

     $bar=(Split-Path $foo.FullName) +"\"+ (Split-Path $foo -leaf)
    

    我不确定是否有更简单的方法可以将整个路径组合为字符串。

    【讨论】:

    • 像这样:$bar = (gci foo.txt).fullname。我以为你只想要目录部分。
    • 我会假设这是一个示例,而不是您的真实代码,但是我不理解您示例的目的,因为您只是再次输出全名。如果您需要拆分它们,您可以使用directoryNameName。这会做同样的事情$bar = "{0}\{1}" -f $foo.DirectoryName,$foo.Name
    • @Matt 如果您将字符串作为 FullName 对象进行任何操作,您将获得 {FullName=... 装饰。我对这些文件名做了很多事情,如果我在做这些文件名时它们是纯字符串,那就更容易了。我将添加另一个更清楚的示例。
    猜你喜欢
    • 2023-01-21
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2018-10-21
    • 2021-10-04
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多