【问题标题】:Powershell, find files containing keyword then rename those filesPowershell,查找包含关键字的文件,然后重命名这些文件
【发布时间】:2014-11-17 18:21:37
【问题描述】:

我正在尝试编写一个脚本来查找包含单词“Datamonitor”的目录中的所有文件,并使用带有前缀“Datamonitor”的现有名称重命名这些文件。

我尝试使用 SelectString cmdlet,但这似乎对我不可用。我发现了一些可以修改的代码,但我一直不知道如何修改。

$directoryToTarget=$args[0]
$wordToFind=$args[1]
$wordToReplace=$args[2]

Clear-Content log.txt

Get-ChildItem -Path $directoryToTarget -Filter *.properties -Recurse | where { !$_.PSIsContainer } | % { 

$file = Get-Content $_.FullName
$containsWord = $file | %{$_ -match $wordToFind}
If($containsWord -contains $true)
{
    Add-Content log.txt $_.FullName
    ($file) | ForEach-Object { $_ -replace $wordToFind , $wordToReplace } | 
     Set-Content $_.FullName
}
}

谁能帮我修改这个以搜索我的关键字并包括Rename-Item -Newmane {"Datamonitor_""+$_.Name}

非常感谢

【问题讨论】:

    标签: powershell


    【解决方案1】:

    以下将查找所有 *.properties 文件,如果它们包含关键字“DataMonitor”,则该文件将被重命名。

    Get-ChildItem -Path $directoryToTarget -Filter *.properties -Recurse | where { !$_.PSIsContainer } | % { 
    
        $i = Get-Content $_ |Select-String "Datamonitor" -SimpleMatch
    
        if ($i -ne $null)
        {
            Rename-Item $_ -NewName ('Datamonitor_'+$_.name)
        }
    }
    

    然而,一个缺点是它只能运行一次。多次运行它会在文件名中添加额外的“Datamonitor_”。不过,这很容易解决。

    PS。在您的问题中,您要求所有文件,然后在 get-childitem 中,您指定一个过滤器。我为这个例子的需要使用了过滤器,如果你想要所有文件,只需删除 -filter *.properties

    【讨论】:

    • 抱歉,还有一个问题……假设我想创建一个文本文件,其中包含所有包含“datamonitor”的文件的文件名,我该怎么做?我可以用ForEach-Object{$_.Name} > C/path/file.txt 之类的东西换掉Rename-Item
    • 我会使用 ForEach-Object{$_.Name |输出文件 C:\path\file.txt -append}
    【解决方案2】:
    $file | %{$_ -match $wordToFind}
    

    检查文件 name$wordToFind 的匹配,而不是文件 content。对于后者,您需要类似

    $file | ? { (Get-Content $_) -pattern $wordToFind }
    

    或(更好)

    $file | ? { Select-String -LiteralPath $_ -Pattern $wordToFind }
    

    请注意,两种方式都进行正则表达式匹配,因此如果$wordToFind 包含特殊字符,您需要正确转义它们:

    [regex]::Escape($wordToFind)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多