Powershell检查文件是否存在并将其替换为新副本

时间:2019-03-07 19:54:41

标签: powershell select-object

我正在尝试检查目录是否存在,以及是否确实用另一个目录中的更新文件替换了该目录中的所有文件。

$path = "C:\mypath\config"
if([System.IO.Directory]::Exists($path)){
    $files = Get-ChildItem -Path $path | Select-Object "Name"
    ForEach ($File in $files)
    {
        Copy-Item -Path "C:\tmp\$File" -Destination "$path\$File.txt"
    }
}

由于$ File返回的是@ {Name = filename},而不仅仅是文件名,我在Copy-Item命令中总是遇到错误。我尝试使用$ File.name,$ File.basename等,但是这些都不起作用。如何使Powershell不将文件名包装在“ @ {Name =}”中?

2 个答案:

答案 0 :(得分:2)

您已经完全正确,只需为-ExpandProperty使用Select-Object参数。

$files = Get-ChildItem -Path $path | Select-Object -ExpandProperty "Name"

这将为您提供一个字符串数组,这些字符串是文件的名称。

您以前拥有的是一组自定义对象,其Name属性是从文件信息对象中复制的。

答案 1 :(得分:1)

访问名称的另一种方法是直接引用name属性:

$files = (Get-ChildItem -Path $path).name