91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-23 14:29:58 來源:億速云 閱讀:246 作者:小新 欄目:系統運維

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

需求

眾所周知的問題,現在視頻網站發布視頻的方式方法已經有了很大的改變。比如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 : 找不到接受實際參數“[SUBPIG][Eien no Nispa SP].mp4”的位置形式參數。
所在位置 行: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中,對于[]符號有特殊的定義,所以不能這么寫。
我們試試在命令行下直接運行它,系統會自動補齊什么樣的字符轉義

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

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

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

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

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

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

先單獨一條數據執行下

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
}

高亮測試

最終方案

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

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  也發現一個很有意思的替換方法,不過一樣的,受限于[],不太適合我的場景。

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麻阳| 大理市| 马尔康县| 晋宁县| 定襄县| 噶尔县| 清苑县| 浦城县| 桂平市| 泸水县| 大埔县| 阳东县| 江永县| 分宜县| 印江| 鄱阳县| 锡林浩特市| 佛冈县| 吉林市| 长顺县| 天气| 宜州市| 福贡县| 贡山| 运城市| 濮阳市| 思南县| 喀什市| 逊克县| 牡丹江市| 瑞昌市| 宜黄县| 桐城市| 昔阳县| 精河县| 八宿县| 茂名市| 汶上县| 玛曲县| 武平县| 清涧县|