【发布时间】:2017-07-14 11:39:48
【问题描述】:
再次,就像这里的任何其他“方括号”相关的 PowerShell 一样,我已经阅读了许多其他类似的问题。但问题是,我得到的错误代码甚至与它们中的任何一个都不相似(“拒绝访问”)。这可能是大多数这些解决方案无效的原因。
基本上我想根据输入批量重命名文件夹中的文件。问题仅在您将 .ps1 文件放在带有方括号 ([]) 的目录上并执行时出现。删除这些括号表明操作顺利。
我的程序的重要部分:
$Replace = Read-Host -Prompt 'To Replace'
$New = Read-Host -Prompt 'With'
Get-ChildItem | ForEach-Object { Move-Item -LiteralPath $_.Name $_.Name.Replace("$Replace", "$New") }
同时,我收到一堆彼此相似的错误代码,如下所示:
Move-Item:拒绝访问路径。 在 D:\[文件夹]\BatchReplaceWords.ps1:33 char:36 + ... ch-Object { 移动项目 -LiteralPath $_.Name $_.Name.Replace("$Replace" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo : PermissionDenied: (C:\Windows\Syst...y.format.ps1xml:FileInfo) [Move-Item], Unauthorized AccessException + FullyQualifiedErrorId : MoveFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.MoveItemCommand更多信息:带有 PowerShell 版本 5 的 Windows 10。
【问题讨论】:
-
使用
-WhatIf开关查看应该发生的情况:move-item -WhatIf -LiteralPath ...。这是查看文件名是否有意义的简单方法。 -
-LiteralPath $_.PSPath -
@MathiasR.Jessen 同样的错误。虽然我要补充一点,我试图避免提供完整路径到“.Replace”,因为它可能会替换路径本身内部的某些内容(嗯,至少据我所知)。
-
@vonPryz 哇,不知何故,程序试图在 System32 文件夹上移动目标。 System32 目录中的许多消息之一:
What if: Performing the operation "Move Directory" on target "Item: C:\Windows\System32\WindowsPowerShell\v1.0\en Destination: C:\Windows\System32\WindowsPowerShell\v1.0\en\en".甚至没有一个针对当前文件夹(带有方括号的那个([ ])。 -
你如何调用你的脚本?你打电话给
Get-ChildItem没有参数。
标签: powershell