PowerShell重命名或删除Thumbs.db文件

时间:2017-03-24 23:46:53

标签: windows powershell operating-system system

我正在处理你无法删除Thumbs.db的Windows错误,因为Windows认为它们是"打开"。

首先,我知道使用regedit允许删除这些内容的可能性,但我不拥有网络文件夹,因此无法访问服务器来执行此操作。但是,如果有人帮助你,你会怎么做:

 add a new "Explorer" Registry path:

 HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer\

 and then add a DWORD entry called "DisableThumbsDBOnNetworkFolders", and set it to 1.

我发现如果我手动重命名Thumbs.db来说" ThisSucks.db"然后我可以删除该文件。我有很多这些带有Thumbs的文件夹,所以我想编写一个PS脚本来重命名所有这些文件或者删除奖金。

当我将拇指收集到一个集合中时,我看到每个文件的Write-Host打印,但是当我尝试重命名时,我得到了#34;无法重命名,因为文件不存在"。

[System.Object[]] $directory = Get-ChildItem -Path $Path -Filter "*.db" -Force -Recurse;

foreach($file in $directory){
    Write-Host -ForegroundColor Green "Found Thumb files";
    Rename-Item $file "StupidFile.db";
} 

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

TessellatingHeckler在对该问题的评论中提供了关键指针:

也许令人惊讶的是,[System.IO.FileInfo]返回的 Get-ChildItem个实例作为字符串绑定到Rename-Item的{​​{1}}参数当作为直接参数 传递时,并且在字符串上下文中, -Path实例扩展为其纯粹的文件名,而不是< em>完整路径

因此,除非[System.IO.FileInfo]实例恰好引用当前目录中的文件,否则[System.IO.FileInfo]无法找到它。

通过管道绑定Rename-Item实例受此陷阱[System.IO.FileInfo]属性为用于绑定到.PSPath),因此您可以使用以下内容:

-Path

请注意 Get-ChildItem -Path $Path -Filter '*.db' -Force -Recurse | Rename-Item -NewName 'StupidFile.sb' -WhatIf 开关,预览重命名操作。删除此开关以执行实际重命名。

关于您的第一个陈述的说明,-WhatIf

您可以使用 [System.Object[]] $directory = Get-ChildItem ...数组子表达式运算符,而不是转换为[System.Object[]],以确保将命令的输出视为数组,即使它只返回一个项目(或没有):

@()

也就是说,在 PSv3 + 上,这通常不是必需的,因为任何标量值也可以像使用数组一样 EM> ; e.g:

$directory = @(Get-ChildItem ...)