我尝试将所有*.csproj.user
个文件从C:\Code\Trunk
递归复制到C:\Code\F2
。
例如:
C:\Code\Trunk\SomeProject\Blah\Blah.csproj.user
会被复制到:
C:\Code\F2\SomeProject\Blah\Blah.csproj.user
我目前的尝试是:
Copy-Item C:\ Code \ Trunk -Filter * .csproj.user -Destination C:\ Code \ F2 -Recurse -WhatIf
但是我得到了:
如果:执行操作"复制目录"在目标"项目: C:\ Code \ Trunk Destination:C:\ Code \ F2 \ Trunk"。
首先,它希望将它们全部放在名为F2\Trunk
的新文件夹中,这是错误的。其次,它没有列出任何文件。应该有大约10个文件要复制。
该命令的正确语法是什么?谢谢!
更新
好吧,它似乎与C:\Code\F2
已经存在的事实有关。如果我尝试将文件复制到 not 的目的地,则可以正常工作。
我想覆盖目标中的任何现有.csproj.user
文件。
答案 0 :(得分:38)
当你真的很简单的时候,你们正在使这个变得非常复杂:
Application.WorksheetFunction.IsNA(rngToCheck.Value)
将复制目录,创建一个" Trunk" F2中的目录。如果您想避免创建顶级Trunk文件夹,则必须停止告诉PowerShell复制它:
Copy-Item C:\Code\Trunk -Filter *.csproj.user -Destination C:\Code\F2 -Recurse
答案 1 :(得分:8)
虽然投票最多的答案对单个文件类型完全有效,但如果您需要复制多种文件类型,则有一个更有用的功能称为robocopy,正是出于此目的,使用更简单
robocopy C:\Code\Trunk C:\Code\F2 *.cs *.xaml *.csproj *.appxmanifest /s
答案 2 :(得分:3)
之前看过这个,我不知道为什么PowerShell似乎无法正确使用(恕我直言)。我会做的更麻烦但是有效。
$Source = 'C:\Code\Trunk'
$Files = '*.csproj.user'
$Dest = 'C:\Code\F2'
Get-ChildItem $Source -Filter $Files -Recurse | ForEach{
$Path = ($_.DirectoryName + "\") -Replace [Regex]::Escape($Source), $Dest
If(!(Test-Path $Path)){New-Item -ItemType Directory -Path $Path -Force | Out-Null
Copy-Item $_.FullName -Destination $Path -Force
}
答案 3 :(得分:2)
我试过Jaykul回答,但这对我没用。我不得不改变它如下,让它工作。我还在它工作之前创建了C:\ Code \ F2文件夹。
Get-ChildItem C:\Code\Trunk Recurse -filter *.csproj.user | Copy -Destination C:\Code\F2
答案 4 :(得分:0)
答案1看起来不错,为了我的目的,我改为Move-Item
。但是我发现在每个文件夹中递归遍历,它只移动了第一个文件。下面是我的完整脚本,其中还包括一些doc文件到pdf的转换:
$Source = 'C:\Users\sgrody\Desktop\NSPM-Vol1'
$MoveFiles = '*.PDF'
$Dest = 'C:\Users\sgrody\Desktop\MedPassPDF'
$Folders = Get-ChildItem $Source -Directory -Recurse
ForEach ($Folder in $Folders)
{
$wdFormatPDF = 17
$word = New-Object -ComObject word.application
$word.visible = $false
$folderpath = "$($Folder.FullName)\*"
$fileTypes = "*.docx","*doc"
Get-ChildItem -path $folderpath -include $fileTypes |
foreach-object
{
$path = ($_.fullname).substring(0,($_.FullName).lastindexOf("."))
"Converting $path to pdf ..."
$doc = $word.documents.open($_.fullname)
$doc.saveas([ref] $path, [ref]$wdFormatPDF)
$doc.close()
}
$word.Quit()
}
Get-ChildItem $Source -Filter $MoveFiles -Recurse | ForEach{
$Path = ($_.DirectoryName + "\") -Replace [Regex]::Escape($Source), $Dest
If(!(Test-Path $Path)){New-Item -ItemType Directory -Path $Path -Force | Out-Null
Move-Item $_.FullName -Destination $Path -Force
}
}
答案 5 :(得分:0)
最近我不得不替换几个子文件夹中的文件,我按如下所述进行操作。
foreach($file in (Get-ChildItem File_you_want_to_be_copied.txt -Recurse)) {$target=$file.directoryname; Copy-Item -path C:\Source_Path\File_you_want_to_be_copied.txt -Destination $target}