重命名第二个扩展名但允许重复

时间:2017-06-30 09:57:12

标签: powershell batch-file cmd

我有一台感染了勒索软件的服务器。我已经解密了大部分内容,但现在文件类型已更改或已重命名,我需要检查:

  • newsfeed.xml.BLACK_MAMBA_Files@QQ.COM.BLACK_MAMBA_Files@QQ
  • Google Chrome.lnk.BLACK_MAMBA_Files@QQ

我试过

ren *.BLACK_MAMBA_Files@QQ* *.

我在想这会重命名所有文件,删除额外的文本但保留原始文件扩展名。我收到的错误是

  

存在重复的文件名或找不到该文件。

我对命令提示符的使用经验非常有限,而且没有使用PowerShell的经验。如果有人可以告诉我应该怎么做这个或替代方案,我将不胜感激。

4 个答案:

答案 0 :(得分:1)

这将重命名文件以删除任何形式的.BLACK_MAMBA_Files后缀:

Get-ChildItem C:\folder -Recurse | Where-Object { $_.Name -like "*BLACK_MAMBA_Files*" } | Rename-Item -NewName { $_.Name -replace ".BLACK_MAMBA_Files.*",""} -WhatIf

注意:

我添加了-WhatIf,因为我只使用您包含的两个示例对此进行了测试。我相信它会正常工作,但最好先测试一下。

如果包含此参数,您可以运行该命令,它只显示重命名命令的结果,但实际上并不完全重命名为真实。

当您确认重命名过程可以正常使用您的文件时,请从结尾删除-WhatIf

答案 1 :(得分:1)

编辑重写脚本以使用RegEX
如果多次附加扩展名, 经常运行此脚本以删除所有出现的事件。

PushD 'X:\folder\to\start'
$Pattern = '(\.COM)*\.BLACK_MAMBA_Files@QQ'
Get-ChildItem -Recurse -File -Filter "*BLACK_MAMBA*"|
  Where Name -match $Pattern|
    ForEach {
      If (!(Test-Path ($_.FullName -replace $Pattern))) {
        $_|Rename-Item -NewName {$_.Name -Replace $Pattern} -confirm
      } Else {
         "can't rename $($_.FullName) ´`r`nbecause      $($_.FullName -Replace $Pattern) already present"
      }
    }
PopD

如果脚本正常,请删除重命名项末尾的-Confirm

答案 2 :(得分:0)

你可以尝试这个,但你应该先测试一下

Get-ChildItem -Path c:\PathtoDirectory -recurse | 
Where {$_.FullName -Like "*.*BLACK*"} | 
Foreach {Rename-item -Path $_.FullName -NewName $_.BaseName}

使用以下命令,您可以看到orignal文件名现在是基本名称,因此我们可以使用该属性重命名它们。

 Get-Item -Path C:\PathtoFile | select *

您必须为扩展名为.com的文件运行两次命令。

答案 3 :(得分:0)

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=U:\sourcedir"
SET "outfile=U:\report.txt"
(
FOR /f "delims=" %%a IN (
 'dir /b /s /a-d "%sourcedir%\*.BLACK_MAMBA_Files@QQ*" '
 ) DO (
 SET "newname=%%a"
 SET "newname=!newname:.BLACK_MAMBA_Files@QQ=?!"
 FOR /f "delims=?" %%r IN ("!newname!") DO ECHO REN "%%a" "%%~nxr"
 )
)>"%outfile%"

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

这个简单的批次应该让你走上正轨。我使用u: ramdrive进行测试。

从您定义为sourcedir的目录开始,仅执行文件名(无目录名)的目录列表,包括子目录。将找到的与掩码“ .BLACK_MAMBA_Files @ QQ ”匹配的每个名称分配给%%a

使用delayed expansion提供的工具,将%%a分配给newname,然后用?替换每个匹配的目标字符串,这是一个非法的文件名字符。< / p>

然后使用默认tokens=1delims=?将结果名称的第一部分分配到newname - 直到第一个分隔符(?)到{ {1}}。

然后仅使用%%r的名称和扩展部分进行重命名(因为这是%%r唯一接受的部分)。

我选择通过括号括起整个嵌套ren语句并将输出重定向到定义为ren的文件来输出for命令。如果这是outfile文件,那么您应该检查它是否合理,然后将输出文件作为另一个批处理运行,如果它看起来合适。这也允许您保留已完成修改的记录。