在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

PowerShell文件名包含[]时如何改后缀

154次阅读
没有评论

共计 2819 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要介绍 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 文件名包含 [] 时如何改后缀”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2819字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
主站蜘蛛池模板: 亚洲人成电影在线观看天堂色 | 国产在线干 | 无码av片在线观看免费 | 久久国产精品久久国产片 | 亚洲色欲一区二区三区在线观看 | 久久精品国产一区二区 | 色婷婷综合久久久久中文字幕 | 天天弄天天干 | 在线观看日本三级 | 中文文字幕文字幕亚洲色 | 国产亚洲精品资源一区 | 国産精品久久久久久久 | 毛片一区二区三区无码 | 99re热这里有精品首页视频 | 国产成人综合色在线观看网站 | 亚洲欧美熟妇综合久久久久 | 久久伊人免费 | 精品在线视频免费 | 人人艹人人插 | 亚洲国产一级a毛片 | 国产一区二区三区福利 | 国产精品视频一区二区三区无码 | 久久国产精品亚洲77777 | 好男人www在线影院官网 | 国模蔻蔻私拍极品150p | 亚洲精品久久久久成人2007 | 欧美视频成人 | 亚洲国产成人精品无码区在线播放 | 天天草天天草 | 无码国内精品人妻少妇蜜桃视频 | 北条麻妃avhd101播放 | 日本大片黄色 | 成人免费视频视频在线不卡 | 四虎网站网址 | 午夜大片爽爽爽免费影院 | 性一交一乱一色一视频 | 国产欧美日韩在线观看精品 | 亚洲国产精品sss在线观看av | 在线播放国产视频 | 中国美女福利视频在线观看 | 天天摸天天做天天爽水多 |