久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

PowerShell文件名包含[]時如何改后綴

181次閱讀
沒有評論

共計 2819 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。

這篇文章主要介紹 PowerShell 文件名包含 [] 時如何改后綴,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

需求

眾所周知的問題,現(xiàn)在視頻網(wǎng)站發(fā)布視頻的方式方法已經(jīng)有了很大的改變。比如 mp4 文件改名為 mp41,類似下面這樣

PS E:\BaiduNetdiskDownload  ls *.mp41 -Recurse
目? 錄?: E:\BaiduNetdiskDownload
Mode LastWriteTime Length Name 
---- ------------- ------ ---- 
-a---- 2019/8/11 20:42 1322066936 [SUBPIG][Eien no Nispa SP].mp41

然而實際按照

[SUBPIG][Eien no Nispa SP].mp41

這個文件名,用 rename 的方式去修改,卻被提示失敗。

PS E:\BaiduNetdiskDownload  Rename-Computer  [SUBPIG][Eien no Nispa SP].mp41   [SUBPIG][Eien no Nispa SP].mp4 
Rename-Computer :  找不到接受實際參數(shù)“[SUBPIG][Eien no Nispa SP].mp4”的位置形式參數(shù)。所在位置   行:1  字符: 1
+ Rename-Computer  [SUBPIG][Eien no Nispa SP].mp41   [SUBPIG][Eien no N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : InvalidArgument: (:) [Rename-Computer],ParameterBindingException
 + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RenameComputerCommand

自動補齊

這是為什么呢?其實原因很簡單,因為 PowerShell 中,對于 [] 符號有特殊的定義,所以不能這么寫。
我們試試在命令行下直接運行它,系統(tǒng)會自動補齊什么樣的字符轉(zhuǎn)義

PS E:\BaiduNetdiskDownload     .\[SUBPIG][Eien no Nispa SP].mp41 

可以看到字符串前面有   然后跟一個空格,字符串被(單引號)包裹,這種方法可以用來運行一些包含了特殊字符的命令行工具,或者可執(zhí)行程序,但是,在傳遞參數(shù)的時候還是用不了的。

我們試試,在某一個參數(shù)中,指定路徑或者文件名,看系統(tǒng)自動補齊會變成什么樣子

PS E:\BaiduNetdiskDownload  Rename-Item -Path  .\`[SUBPIG`]`[Eien no Nispa SP`].mp41

大概這就是正確方式了吧,專門寫了個函數(shù)

function EscapeWord ($param1) { if ($param1 -match  [[]  -or $param1 -match  []] ) { $param1.replace( [ ,  `[).replace(] ,  `] )
 }
EscapeWord  E:\BaiduNetdiskDownload\[SUBPIG][FAKE AFFAIR EP05].mp41 
E:\BaiduNetdiskDownload\`[SUBPIG`]`[FAKE AFFAIR EP05`].mp41

先單獨一條數(shù)據(jù)執(zhí)行下

PS E:\BaiduNetdiskDownload  Rename-Item -Path  .\`[SUBPIG`]`[Eien no Nispa SP`].mp41 -NewName  .\`[SUBPIG`]`[Eien no Nispa SP`].mp4  
Rename-Item :  指定路徑  E:\BaiduNetdiskDownload\`[SUBPIG`]`[Eien no Nispa SP`].mp41  下的對象不存在。

實際來看,還是失敗了。

變通解決

實在是挺無語的,既然 [] 在 PowerShell 下被重新定義了,那 CMD 下總是好的吧。用 CMD 來混合一下。這次的做法是切割名稱字符串,把最后一個字符串切掉,然后替換名稱。依然可以達到需求,并且修改記錄還會追加保存在一個文件中。

(Get-ChildItem *.mp41 -Recurse) | ForEach-Object { $fullname = $_.fullname 
 $fullname
 $NewName = $_.name
 $NewName = ($NewName[0..($NewName.Length - 2)] -join  )
 $NewName
 $info =  rename ` $fullname`  ` $NewName` 
 cmd /c $info
 $info | Out-File c:\333.txt -Append -Force -Encoding utf8
}

高亮測試

最終方案

問題是解決了,但是實現(xiàn)方法太擰巴。如果有原生方法,上面的操作還是不會考慮的。
我通過搜關(guān)鍵字

rename file PowerShell match []

在東家找到了下面一個最終極的方案。
https://answers.microsoft.com/en-us/windows/forum/windows_10-files/how-to-rename-image-files-in-a-folder-all-to-jpg/2a7e2873-e04b-472b-b239-afad2f2020fc

果然解決不了的時候直接上.net 都是一件利器。

Get-ChildItem *.mp41 -Recurse | Rename-Item -newname { [io.path]::ChangeExtension($_.name,  mp4) }

在 https://stackoverflow.com/questions/5574648/use-regex-powershell-to-rename-files   也發(fā)現(xiàn)一個很有意思的替換方法,不過一樣的,受限于[],不太適合我的場景。

Get-ChildItem *.mp41 | ForEach-Object{ Rename-Item $_ $(($_.name -replace  ^filename_+ ,) -replace  _+ ,   ) }

以上是“PowerShell 文件名包含 [] 時如何改后綴”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計2819字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 综艺| 新津县| 噶尔县| 鸡东县| 顺昌县| 眉山市| 凌云县| 亳州市| 疏附县| 固始县| 金华市| 札达县| 青浦区| 曲水县| 潍坊市| 昭通市| 扬州市| 临沭县| 滦平县| 宿州市| 桂阳县| 旬邑县| 南木林县| 佳木斯市| 上杭县| 诸城市| 遂川县| 曲阜市| 岳阳县| 昂仁县| 隆昌县| 阿坝县| 宜良县| 二连浩特市| 鲁甸县| 鄂托克前旗| 邵武市| 南皮县| 汉中市| 宝山区| 综艺|