再次,像其他任何“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。
答案 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 }