powershell - Powershell检查文件是否存在并将其替换为新副本
问题描述
我正在尝试检查一个目录是否存在,以及它是否用另一个目录中的更新文件替换了该目录中的所有文件。
$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 等,但这些似乎都不起作用。如何让 Powershell 不将文件名包装在“@{Name=}”中?
解决方案
你几乎是对的,你只需要使用-ExpandProperty
参数 for Select-Object
。
$files = Get-ChildItem -Path $path | Select-Object -ExpandProperty "Name"
这将为您提供一个字符串数组,这些字符串是文件的名称。
您之前拥有的是一组自定义对象,其中包含从文件信息对象复制的 Name 属性。
推荐阅读
- javascript - 命名空间 own-props 与 state-props 分开是一种有用的模式吗?
- java - 我需要帮助处理 JUnit 测试和 CDI 事件
- assembly - 装配冒泡排序算法
- vb.net - For Next 循环中的 If else 语句有问题
- php - 如何从 Yii2 Gridview 值调用模型函数
- javascript - ng-model 不会更新
- selenium - 如何从相同的元素中获取多个相同的 href 链接
- wordpress - 为什么我必须多次刷新 WordPress 网站才能显示?
- c# - 检查 S3 的权限
- c - 在客户端运行 C DLL 的最佳方法是什么?