Powershell 检查文件是否存在并用新副本替换它
Powershell check if file exists and replace it with new copy
我正在尝试检查目录是否存在,以及它是否会用另一个目录中的更新文件替换该目录中的所有文件。
$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"
}
}
我一直在使用 Copy-Item 命令时出错,因为 $File 返回的是 @{Name=filename} 而不仅仅是文件名。我试过使用 $File.name、$File.basename 等,但其中 none 似乎有效。如何让 Powershell 不将文件名包装在“@{Name=}”中?
你几乎做对了,你只需要为Select-Object
使用-ExpandProperty
参数。
$files = Get-ChildItem -Path $path | Select-Object -ExpandProperty "Name"
这将为您提供一个字符串数组,这些字符串是文件的名称。
您之前拥有的是一组自定义对象,其名称 属性 从文件信息对象中复制而来。
另一种访问名称的方法是直接引用名称 属性:
$files = (Get-ChildItem -Path $path).name
我正在尝试检查目录是否存在,以及它是否会用另一个目录中的更新文件替换该目录中的所有文件。
$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"
}
}
我一直在使用 Copy-Item 命令时出错,因为 $File 返回的是 @{Name=filename} 而不仅仅是文件名。我试过使用 $File.name、$File.basename 等,但其中 none 似乎有效。如何让 Powershell 不将文件名包装在“@{Name=}”中?
你几乎做对了,你只需要为Select-Object
使用-ExpandProperty
参数。
$files = Get-ChildItem -Path $path | Select-Object -ExpandProperty "Name"
这将为您提供一个字符串数组,这些字符串是文件的名称。
您之前拥有的是一组自定义对象,其名称 属性 从文件信息对象中复制而来。
另一种访问名称的方法是直接引用名称 属性:
$files = (Get-ChildItem -Path $path).name