powershell - 重命名包含方括号的文件
问题描述
用于批量重命名一个文件夹中的文件的 PS 命令确实适用于其中没有一对方括号的所有文件,但如果文件名包含一个方括号则永远不会。如果名称中有一个或多个右方括号,它也可以工作,但任何数量的左方括号都会导致错误。
错误注释:rni : Impossible de renommer l'élément situé à l'emplacement « C:\Users\X\documents\dossier\machine[3].txt », car il n'existe pas。
翻译_rni:无法重命名在« C:\Users\X\documents\dossier\machine[3].txt »中找到的元素,因为它不存在。
这是命令的代码;
$dos1=(ls C:\Users\X\documents\dos1).name
foreach ($fic in $dos1)
{rni C:\Users\X\documents\dos1\$fic §§$fic}
用户PetSerAI的插入“-LiteralPath”的建议适用于当前情况;
$dos1=(ls C:\Users\X\documents\dos1).name
foreach ($fic in $dos1)
{rni -literalpath C:\Users\X\documents\dos1\$fic §§$fic}
然而,对于更复杂的代码,同样的问题会再次出现;“-LiteralPath”在下面的代码中没有预期的效果;
$dos1=(ls C:\Users\X\documents\dos1).name
$dos2=(ls C:\Users\X\documents\dos2).name
foreach ($fic2 in $dos2) {foreach ($fic1 in $dos1)
{if ("$fic1" -match "$fic2") {rni -literalpath C:\Users\X\documents\dos1\$fic1 §§$fic1}}}
更糟糕的是,至少有一对不同的名称会发生重命名:
“ §§§§§§§§机器 5.txt ”,“机器 5.txt ”。
有没有办法在没有太多额外编码的情况下完成这项工作?
解决方案
正如PetSerAl所指出的,使用
-LiteralPath
参数明确地按原样传递路径,而不会将可能不需要的解释解释为通配符表达式,因为这是路径参数的位置使用所做的,因为隐式绑定到-Path
参数。同样,您不能用于
-match
执行字符串文字比较,因为 RHS 的-match
设计被解释为正则表达式(正则表达式),其中[...]
也具有特殊含义,就像在通配符表达式中一样(尽管重要的是要注意正则表达式和通配符只是远相关,通常具有根本不同的语法)。- 要执行字符串文字相等比较,只需使用
-eq
. - 如果您需要字符串文字子字符串匹配,请参阅此答案。
- 要执行字符串文字相等比较,只需使用
因此,请使用以下内容:
$dos1=(gci -LiteralPath C:\Users\X\documents\dos1).name
$dos2=(gci -LiteralPath C:\Users\X\documents\dos2).name
foreach ($fic2 in $dos2) {
foreach ($fic1 in $dos1) {
if ($fic1 -eq $fic2) { rni -LiteralPath C:\Users\X\documents\dos1\$fic1 §§$fic1 }
}
}
注意:我已将 cmdlet 替换ls
为更符合 PowerShell 惯用的别名(与您对forgci
的使用一致);然而,总的来说,最好在脚本中完全避免使用别名。Get-ChildItem
rni
Rename-Item
另请注意,在 PowerShell 中 - 与 Bash 等类似 POSIX 的 shell 不同 - 不需要将(字符串)变量包含在 中"..."
,因为按原样引用它们可以正常工作,即使它们包含嵌入的空格;也就是说,如果$var
是一个字符串,按原样使用它 - 不需要"$var"
.
推荐阅读
- python - 如何在 Docker 中保留 dotenv 机密?
- reactjs - React fetch API 与图表中的实时数据
- python - Spoitpy 当前播放
- python-3.x - 专门调用外部函数 Python 之外的嵌套函数
- ms-word - 如何在用户不选择整个内容的情况下检测内容控件?
- sqlite - 是否有用于 Flutter 的 SQLite 的 NoSQL 替代品?
- nlp - 删除并重新初始化相关的 BERT 权重/参数
- next.js - Next.JS 和 Styled - 图标
- spring-boot - Kubernetes - Spring - NTLM 代理身份验证成功并在一段时间后失败
- python - Python SMTPlib 作为 Node.js 子进程在 ehlo 失败