问题描述
您好,在此先感谢您的帮助。我试图删除由于安全漏洞而添加到库中文档的额外扩展名。当我手动删除扩展名“ .easy2lock”时,该文件可用。但是,当我尝试通过Powershell以编程方式执行此操作时,它会起作用,但对于路径较长的文件夹则不起作用。有谁知道如何在Powershell中解决这个问题?
我尝试过尝试更新注册表以允许较长的路径,但是,我认为这不会对
这是我收到的脚本和错误:
use Digest::SHA1 qw(sha1 sha1_hex sha1_base64);
$digest = sha1_base64("abcd£");
print $digest;
print "\n";
解决方法
我必须承认,更改名称后文件可以使用,这不是我的经验。为了能够在Powershell中访问长路径,您需要使用-LiteralPath
参数。不幸的是,-Path
参数将是管道传输时使用的默认值。 -LiteralPath
确实按属性名接受管道输入,因此您可以像这样操作对象删除路径并添加文字路径
Get-ChildItem -Filter "*$BadExtension" -Recurse |
Select-Object Name,Basename,Extension,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
Rename-Item -NewName {$_.Name -replace $BadExtension}
或者您可以使用Foreach-Object
或foreach循环并为路径使用所需的语法\\?\
。
Get-ChildItem -Filter "*$BadExtension" -Recurse | Foreach-Object {
Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.Name -replace ‘$BadExtension’)
}
修改
由于基本名称是所需的文件名(只是没有不需要的扩展名),因此可以将基本名称用作新名称。所有四个示例均已通过测试并确认有效。如果对您不起作用,那么还有其他事情发生。
Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName ($_.name -replace $BadExtension)
}
Get-ChildItem -Filter *$BadExtension -Recurse | ForEach-Object {
Rename-Item -LiteralPath "\\?\$($_.FullName)" -NewName $_.basename
}
Get-ChildItem -Filter "*$BadExtension" -Recurse |
Select-Object Name,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
Rename-Item -NewName {$_.Name -replace $BadExtension}
Get-ChildItem -Filter "*$BadExtension" -Recurse |
Select-Object Basename,@{n='LiteralPath';e={"\\?\$($_.fullname)"}} |
Rename-Item -NewName {$_.baseName}