【发布时间】:2019-09-04 14:29:37
【问题描述】:
用于批量重命名一个文件夹中的文件的 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”。
有没有办法在没有太多额外编码的情况下完成这项工作?
【问题讨论】:
-
rni -LiteralPath -
克服feature wildcard and ranges 的另一种方法是用(双)反引号转义括号。
标签: powershell square-bracket rename-item-cmdlet