【问题标题】:Copying multiple files into same directory while changing filename更改文件名时将多个文件复制到同一目录中
【发布时间】:2015-07-09 10:19:27
【问题描述】:

我需要复制一系列看起来像

的文件
foo.bar
foo.baz
foo.boo
...

进入同一导演,但将foo更改为moo

moo.bar
moo.baz
moo.boo
...

但我不确定如何在一个命令中复制和重命名多个文件。类似于

cp 'foo.*' . | ren foo.* moo.*

除非那没有句法意义。我意识到我可以把它放在一个临时目录中,在那里重命名然后将它移回,但我很好奇是否有 1 行的方式来做到这一点。

【问题讨论】:

    标签: file powershell copy rename


    【解决方案1】:

    您可以通过以下方式重命名多个文件:

    Get-ChildItem -Filter "foo*" | {$_.name -replace 'foo','moo' }
    

    更多详情请参考link

    您可以在 powershell 中使用分号链接命令。

    编辑:我目前无法访问 Windows 机器来测试它,但我想以下应该可以工作:

    ls 'foo*' | % {$newName = $_.name -replace 'foo','moo'; cp $_ $newName ; }
    

    【讨论】:

    • 但这不会替换文件吗?我也想保留原件。
    • 不,不会的。 $newName 将保存您要提供的新名称(例如:moo.bar)。然后'cp' 创建一个名为$newName 的原始文件(即$_)的副本。如果要将文件复制到与当前文件夹不同的目标,可以将该路径作为 $newName 的一部分提供。您可以先使用示例文件进行尝试以确认它。正如我所提到的,很遗憾,我现在无法对其进行测试。
    • 哦,我的意思是第一次尝试。 Get-ChildItem -Filter "foo*" | {$_.name -replace 'foo','moo' }
    • 实际上,第一次尝试可能只是给你一个文件名数组,其中 'foo' 替换为 'moo'。为了真正重命名文件,它必须是这样的: Get-ChildItem -Filter "foo*" |重命名项目 -NewName {$_.name -replace 'foo','moo' }。
    【解决方案2】:

    你可以这样:

    Get-ChildItem  -Filter "foo*" | % {
       Copy-Item  $_.Name ($_.Name -replace 'foo', 'moo' ) -WhatIf 
    }
    

    让 -whatif 进行测试,然后在您满意时将其删除。它可以满足您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-14
      • 2012-09-29
      • 2017-05-02
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多