使用PowerShell重命名文件会显示“拒绝访问路径”

时间:2017-07-14 11:39:48

标签: powershell

再次,像其他任何“Square Bracket”相关的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 : Access to the path is denied.
At D:\[Folder]\BatchReplaceWords.ps1:33 char:36
+ ... ch-Object { Move-Item -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。

2 个答案:

答案 0 :(得分:1)

如果要枚举带方括号的文件夹中的文件,则需要为Get-ChildItem的{​​{1}}参数指定位置。

可以通过-LiteralPath(PowerShell 3.0+)或$PSScriptRoot自动变量找到脚本的位置:

$MyInvocation

答案 1 :(得分:0)

$TextToReplace = Read-Host -Prompt 'Enter the filename text to replace:'
$ReplacementText = Read-Host -Prompt 'What are you replacing this text with?'
$Path = Read-Host -Prompt 'Which path do these files exist?'

GCI -Path $Path |
  ? { $_.FullName -like "*$TextToReplace*" } |
  % { Rename-Item -Path $_.FullName -NewName $ReplacementText }