powershell 删除之前的所有内容\

j7dteeu8  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(197)

我需要复制大量文件,并在文件需要放置的位置使用相同类型的文件夹结构。例如,如果我有以下两个文档:

\\Server1\Projects\OldProject\English\Text_EN.docx
\\Server1\Projects\OldProject\English\Danish\Text_DA.docx

我需要将它们移到服务器上的一个新位置,但它们需要在相同的“语言文件夹”中。所以我需要这样移动它们:

\\Server1\Projects\OldProject\English\Text_EN.docx -> \\Server1\Projects\NewProject\English\Text_EN.docx
\\Server1\Projects\OldProject\English\Danish\Text_DA.docx -> \\Server1\Projects\NewProject\English\Danish\Text_DA.docx

这里的问题是,我需要取“Language”文件夹的名称并在NewProject文件夹中创建它们。
我如何才能获取和删除\之前的所有内容,这样我最终只能拥有像English\English\Danish这样的“语言”文件夹

pod7payv

pod7payv1#

如果目标只是将文件路径中的‘OldProject’文件夹替换为‘NewProject’,您可以使用REPLACE对文件路径进行更改:

$filePath = Get-ChildItem \\Server1\Projects\OldProject\English\Text_EN.docx
Copy-Item $filePath.FullName -Destination ($filepath.FullName -replace "\bOldProject\b", "NewProject")

‘\b’用于对标记内的任何内容执行正则表达式精确匹配。

5q4ezhmt

5q4ezhmt2#

尝试执行以下操作,对于每个输入文件:

  • 构造目标目录。通过用新项目目录的根路径替换旧项目目录的根路径,从而有效地复制旧目录的子目录结构。
  • 确保目标目录。存在
  • 然后将输入文件复制到目标目录。
$oldProjectRoot = '\\Server1\Projects\OldProject'
$newProjectRoot = '\\Server1\Projects\NewProject'

Get-ChildItem -Recurse -Filter *.docx -LiteralPath $oldProjectRoot |
  ForEach-Object {
    # Construct the target dir. path, with the same relative path 
    # as the input dir. path relative to the old project root.
    $targetDir = 
      $newProjectRoot + $_.Directory.FullName.Substring($oldProjectRoot.Length)
    # Create the target dir., if necessary (-Force returns any preexisting dir.)
    $null = New-Item -Force -Type Directory $targetDir
    $_ # Pass the input file through.
  } |
  Copy-Item -Destination { $targetDir } -WhatIf

注意:上面命令中的-WhatIf公共参数预览操作。一旦您确定操作将执行您想要的操作,请删除-WhatIf

相关问题