我有一堆html文件,我需要在将其上传到服务器之前使用url编码重命名。我试过了:
Get-ChildItem -Path c:\temp\ -Recurse -Filter *.html | Rename-Item -NewName { $_.Name.replace("*.html",[Web.Httputility]::UrlEncode("*.html")) }
但这不适用于编码,甚至可以以某种方式完成?
答案 0 :(得分:1)
这是执行此操作的基本方法,based on this answer:
(Get-ChildItem -Path c:\temp\ -Recurse -Filter *.html -File) |
foreach { ren $_.fullname ([uri]::EscapeDataString($_))}
最初我在()
周围没有Get-ChildItem
的情况下编写了它,但发现它仍在读取目录信息,而重命名已经重命名了第一个项目。然后重命名第二次重新编码第一个项目,从而使它有点大声。
这是一个更清洁的版本,首先处理文件,然后处理文件夹:
$files = Get-ChildItem -Path c:\temp\ -Recurse -Filter *.html -File
$folders = Get-ChildItem -Path c:\temp\ -Recurse -Filter *.html -Directory
$files | foreach { ren $_.fullname ([uri]::EscapeDataString($_))}
$folders | foreach { ren $_.fullname ([uri]::EscapeDataString($_))}
答案 1 :(得分:0)
根据你的回答,我这样做是为了让它发挥作用
(Get-ChildItem -Path c:\temp\ -Recurse -Filter *.html) |
foreach { ren $_.fullName ([uri]::EscapeDataString($_.Name))} | Out-Null
Get-ChildItem -Path c:\temp\ -Recurse | ?{ $_.PSIsContainer } |
foreach { ren $_.fullName ([uri]::EscapeDataString($_.Name))}
首先我只做文件然后文件夹,因为当重置顶级文件夹时,其中的文件路径不再存在。