2

我正在尝试使用 Powershell V2.0 命令行中的 rename 进行简单复制,如下所示:

Copy-Item my_file.* my_file_old.*

我希望它的功能与 DOS 等效

copy my_file.* my_file_old.*

但是,它因抱怨“路径中的非法字符”而失败。*如果我用特定的文件号(例如 1)替换通配符,它​​可以正常工作。

-Exclude我想我基本上是在尝试复制那个 DOS 版本,但是在 Powershell 中,一旦我整理出这个基本版本,我想在其中使用该参数。

我究竟做错了什么?我发现另一个论坛上的一些帖子建议 V2.0 不支持通配符,但我不敢相信。这就像微软说的“我们刚刚发布了新版本的 Windows,但忘记支持键盘和鼠标”。

4

3 回答 3

3

如果您查看它的帮助,Copy-Item它将告诉您哪些参数支持通配符,哪些不支持。 -Destination不支持通配符:

-Destination 指定新位置的路径。要重命名复制的项目,请在值中包含新名称。

  Required?                    false
  Position?                    2
  Default value
  Accept pipeline input?       true (ByPropertyName)
  Accept wildcard characters?  false

你可以用一点点脚本做你想做的事:

Get-ChildItem my_file.* | Copy-Item -Dest {$_.basename + "_old" + $_.extension} -WhatIf

当您满意时删除该-WhatIf参数,它将正确复制文件。

于 2013-11-05T17:40:43.737 回答
2

假设您正确使用通配符,肯定支持它们。目的地中的通配符很奇怪,并且在大多数情况下不是您想要的。并且将一个文件(或一组文件)复制到自身上(这就是您在这里所做的 - 当您不指定参数名称时,Copy-Item第一个是源,第二个是目标)几乎肯定不是您想要的.

copy-item myFile.* -destination DESTPATH

或者

get-childitem -filter myFile.* | Copy-Item -destination DESTPATH
于 2013-11-05T16:34:11.493 回答
1

这是将一堆 .jpg 文件重命名为数字顺序列表的示例 [001.jpg、002.jpg 等]

get-childitem *.jpg | foreach-object -begin {$count=1} -process {rename-item -path $_.FullName -newname ('{0:000}.jpg' -f $count++)}

您可以通过调整 *.jpg 和 '{0:000}.jpg' 部分来调整它以满足您的需求

于 2013-11-05T16:28:31.500 回答