我期望从以下代码中获得的行为是:
循环并将每个文件复制到备份目标,只有它尚不存在.
if (!(Test-Path C:\Folder\Destination)) {
New-Item -ItemType Directory -Force -Path C:\Folder\Destination
}
$originalfiles = Get-ChildItem -Path "C:\Folder\Source"
$originalfiles
foreach ($file in $originalfiles) {
Write-Host
Write-Host File Name: -ForegroundColor DarkYellow
Write-Host $file.Name
Write-Host File Path: -ForegroundColor DarkYellow
Write-Host $file.FullName
$src = $file.FullName
$dest = "C:\Folder\Destination\$($file.Name)"
Copy-Item $src $dest
}
Run Code Online (Sandbox Code Playgroud)Copy-Item
除非您指定-Force
标志,否则我会认为cmdlet默认为不覆盖.这是我过去在遇到我想要覆盖的情况时会看到的行为.
此外,我认为它可能是foreach
循环的介绍,但我尝试使用自己的复制命令,单个文件的硬编码路径,它仍然是相同的.
我应该重新启动IDE还是我忽略了一个错误?
小智 9
旧的,但是我发现有一个简短的表达式可以做到这一点:
Copy-Item (Join-Path $dir_from "*") $dir_to -Exclude (Get-ChildItem $dir_to)
Run Code Online (Sandbox Code Playgroud)
它将所有文件从复制$dir_from
到,$dir_to
但不复制(-Exclude部分)名称已经存在的文件$dir_to
它似乎是将Copy-Item
项目复制到目标的预期行为,即使它已存在于目标中.我建议测试,如果目标文件路径存在,只复制该文件(如果它尚不存在).
$destinationPath = 'C:\tryout\destination';
if (!(Test-Path $destinationPath))
{
New-Item -ItemType Directory -Force -Path $destinationPath;
}
$sourcePath = 'C:\tryout\source';
$originalfiles = Get-ChildItem -Path $sourcePath;
$originalfiles;
foreach ($file in $originalfiles)
{
Write-Host;
Write-Host File Name: -ForegroundColor DarkYellow;
Write-Host $file.Name;
Write-Host File Path: -ForegroundColor DarkYellow;
Write-Host $file.FullName;
$src = $file.FullName;
$dest = "C:\tryout\destination\$($file.Name)";
if (!(Test-Path $dest))
{
Copy-Item $src -Destination $dest;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22492 次 |
最近记录: |