我正在尝试使用Powershell V2.0命令行重命名进行简单复制,如下所示:
Copy-Item my_file.* my_file_old.*
我希望它的功能与DOS等效功能相同
copy my_file.* my_file_old.*
然而,投诉失败了“路上的非法人物”。如果我将通配符*
替换为特定的文件编号,例如1,它工作正常。
我想我基本上都试图复制那个DOS版本,但是在Powershell中,一旦我将这个基本版本整理出来,我想使用-Exclude
参数。
我做错了什么?在V2.0中,我发现另一个论坛上的一些帖子我发现建议的通配符不受支持,但我无法相信。这就像微软说“我们刚刚发布了Windows的新版本,但忘了支持键盘和鼠标”。
答案 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