如何在Windows Powershell V2.0中使用通配符

时间:2013-11-05 16:21:31

标签: powershell wildcard

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

Copy-Item my_file.* my_file_old.*

我希望它的功能与DOS等效功能相同

copy my_file.* my_file_old.*

然而,投诉失败了“路上的非法人物”。如果我将通配符*替换为特定的文件编号,例如1,它工作正常。

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

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

3 个答案:

答案 0 :(得分: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参数,以便正确复制文件。

答案 1 :(得分: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”部分来调整它以满足您的需求

答案 2 :(得分:1)

如果您正确使用通配符,则肯定支持通配符。目的地中的通配符很奇怪,在大多数情况下不是您想要的。并且将文件(或文件组)复制到自身上(这是你在这里做的 - 当你没有为Copy-Item指定参数名时,第一个是源,第二个是目的地)几乎是当然不是你想要的。

copy-item myFile.* -destination DESTPATH

get-childitem -filter myFile.* | Copy-Item -destination DESTPATH