【问题标题】:Copy file with relative path使用相对路径复制文件
【发布时间】:2019-03-06 11:19:35
【问题描述】:

我想将某种类型的所有文件从某个子目录及其相对路径从该子目录复制到另一个目录,并且相对路径完好无损。例如:

源子目录:

c:\temp\sourcedirectory

源文件:

c:\temp\sourcedirectory\tonymontana\fileOne.txt
c:\temp\sourcedirectory\poker\fileTwo.txt

目标目录:

c:\temp\targetdirectory

想要的结果:

c:\temp\targetdirectory\tonymontana\fileOne.txt
c:\temp\targetdirectory\poker\fileTwo.txt

到目前为止,我想出了:

Set-Location $srcRoot
Get-ChildItem -Path $srcRoot -Filter $filePattern -Recurse |
    Resolve-Path -Relative |
    Copy-Item -Destination {Join-Path $buildroot $_.FullName}

但是,这种“一切都是对象”à la PowerShell 让我失望(至少我怀疑是这样)。 IE。文件被复制,但没有它们的相对路径。

谁能给我一点启示?

【问题讨论】:

  • “谁能给我一点启发?” - 看起来微软采取了一些简单的工作,并将其复杂到不再工作的地步。当开发人员不得不上网并查找如何使用复制命令时,这很可悲。对微软来说,这是一场史诗般的工程失败。
  • @jww 伙计,你在说什么?常规复制命令不会使用相对路径复制文件,并且永远不会复制。这总是需要编写脚本或使用xcopyrobocopyrsync 等专用工具。

标签: powershell


【解决方案1】:

不要为此使用 PowerShell cmdlet,只需使用 robocopy

robocopy C:\temp\sourcedirectory C:\temp\targetdirectory *.txt /s

【讨论】:

  • 只有 PowerShell 的外壳,你怎么能不使用它?
  • @jww 请仔细阅读。 robocopy 在 PowerShell 中的工作方式与在 CMD 中的工作方式相同。此类任务不需要 PowerShell cmdlet
  • 主题“使用相对路径复制”不是通过使用绝对路径的答案来解决的。本问答是关于如何将包含文件的文件夹结构从一个绝对路径复制到另一个绝对路径。
  • @user1748217 OP在问题中将源目录和目标目录作为绝对路径提供;这个答案只是使用那些,以便它与问题相匹配。关于相对路径的部分是因为 OP 需要保留 相对于源目录的路径。但我认为当源目录和目标目录作为相对路径给出时,这个答案同样有效。
【解决方案2】:

你可以试试这个:

$srcroot = "c:\temp\sourcedirectory"
$builroot= "c:\temp\targetdirectory"
gci -path $srcroot -filter $filepattern -recurse | 
  % { Copy-Item $_.FullName -destination ($_.FullName -replace [regex]::escape($srcroot),$builroot) }

【讨论】:

  • 在替换操作中遇到了一些问题,构建目录没有被预先设置,但是源被删除了。可能是“DOOH!我最后的错误。无论如何,谢谢。
【解决方案3】:

试试这个:

Copy-item $srcRoot -destination $destination -recurse

【讨论】:

  • 这将在相对路径中包含实际的 srcRoot,当然我可以从 srcRoot 遍历子目录,并根据您的建议将这些子目录与过滤器参数一起传递。
【解决方案4】:

为了防止复制文件夹本身,即创建

c:\temp\targetdirectory\sourcedirectory

更改为源文件夹,然后使用通配符代替文件夹作为源:

cd C:\temp\sourcedirectory\
Copy-item * -destination c:\temp\targetdirectory -recurse`

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 2013-01-31
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2015-12-18
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多