没有尝试做任何激烈的事情,但我正在从mp3标题标签重命名我的音乐文件。 遇到这个问题的文件: -
$fyl = One Vision [From the Motion Picture Iron Eagle].mp3
$tmp = "tmp.mp3"
$track_title = One vision [From the motion picture Iron Eagle]
rename-item "$mp3path$fyl" -newname "$mp3path$tmp"
rename-item "$mp3path$tmp" -newname "$mp3path$track_title.mp3"
我收到错误: - 重命名项目:无法重命名,因为'F:\ Music \ Queen \ Live Magic \ One Vision [来自电影铁鹰] .mp3'中的项目不存在。
文件存在!
如果在没有区分大小写的情况下查看文件是相同的话,我会通过tmp.mp3。
该代码适用于没有方括号的文件,因此很明显Powershell正在逐字逐句地使用它们。
我确实尝试用Move-Item替换Rename-Item,但是我得到了类似的错误。
感谢任何帮助。
答案 0 :(得分:6)
-LiteralPath知道如何处理特殊字符 试试这个:
Rename-Item -LiteralPath C:\[filename].txt -NewName filename.txt
答案 1 :(得分:0)
我可以新建,重命名,删除和获取此类文件。
此脚本也可以成功运行,也许您可以使用它来调试脚本。
请注意,我使用Join-Path
出于习惯和最佳做法来确保路径有效。
测试代码:
$mp3dir = "d:\test"
$fyl = "One Vision [From the Motion Picture Iron Eagle].mp3"
$tmp = "tmp.mp3"
$track_title = "One vision [From the motion picture Iron Eagle]"
New-Item -Path $mp3dir -Name $fyl -ItemType file -Force | Out-Null
$found = Get-ChildItem -Path $mp3dir -Filter *.mp3
"Found1:"
$found | % {$_.FullName}
Remove-Item $(Join-Path $mp3dir $tmp) -ErrorAction SilentlyContinue
Rename-Item -LiteralPath $(Join-Path $mp3dir $fyl) -NewName $tmp -Force
$found = Get-ChildItem -Path $mp3dir -Filter *.mp3
"Found2:"
$found | % {$_.FullName}
$newName = $(Join-Path $mp3dir $($track_title + ".mp3"))
"New name:`n$newName"
Remove-Item $(Join-Path $mp3dir $newName) -ErrorAction SilentlyContinue
Rename-Item -LiteralPath $(Join-Path $mp3dir $tmp) -NewName $newName -Force
$found = Get-ChildItem -Path $mp3dir -Filter *.mp3
"Found3:"
$found | % {$_.FullName}
测试输出
Found1:
D:\test\One Vision [From the motion picture Iron Eagle].mp3
Found2:
D:\test\tmp.mp3
New name:
d:\test\One vision [From the motion picture Iron Eagle].mp3
Found3:
D:\test\One vision [From the motion picture Iron Eagle].mp3
答案 2 :(得分:0)
从您的评论到我收集的其他答案,您使用的是PowerShell v2。
现在,PowerShell v2中的Rename-Item
cmdlet似乎没有-LiteralPath
参数,您需要这些参数才能正确解释包含特殊字符(如方括号)的路径。
Rename-Item
的另一个cmdlet是Move-Item
,即使在PowerShell v2中,(好奇地) 支持-LiteralPath
参数。
而不是:
rename-item "$mp3path$fyl" -newname "$mp3path$tmp"
尝试:
Move-Item -LiteralPath "$mp3path$fyl" -Destination "$mp3path$tmp"
在您提出的问题中,您已尝试Move-Item
而不是Rename-Item
。但您是否尝试Move-Item
与-LiteralPath
结合使用?
答案 3 :(得分:0)
class ErrorPage extends CI_Controller {
public function index() {
$this->load->view('404page.php');
} }
方法有效:-)我还发现通过使用move-item -literalpath $var1 -destination $var2
,我可以根据需要重命名文件,而无需通过tmp文件。后来的测试证明[System.IO.File]::Move( "$mp3path$fyl" , "$mp3path$track_title.mp3")
方法也不需要临时文件。