如何移动没有硬编码变量的项目

时间:2019-06-04 19:13:01

标签: shell powershell

我想移动扩展名为 .txt 的项目,但不是这样,采用硬编码。我想从一个文件夹中选择所有带有扩展名的文件,然后将它们移动到一个与扩展名相同的文件夹中。我想对目录中的所有扩展名执行此操作。

有什么想法吗? 谢谢!

看看我的代码,但是我用硬编码的变量来做

$variable=Get-ChildItem -Path "C:\somePath"

foreach ($variables in $variable)
{

   if($extension=($variables | Where {$_.extension -like ".txt"}))
   {

        New-Item -ItemType Directory -Path "C:\somePath\text"
        $extension | Move-Item -Destination "C:\somePath\text"
   }
}

2 个答案:

答案 0 :(得分:1)

尽管此解决方案不像其他解决方案那样简洁,但它确实可以处理目标文件夹不存在的情况。它还会移动可能包含特殊字符的文件,例如[]。它还明确忽略了没有扩展名的文件,因为没有要求。通过使用Group-Object,可以最大程度地减少循环次数。

$Path = "C:\Somepath"
$files = Get-ChildItem -Path $Path -File |
    Group-Object -Property {($_.extension |
        Select-String -Pattern "[^. ]+").matches.value
    }
Foreach ($ExtGroup in $files) {
    $Destination = "$Path\$($ExtGroup.Name)"
    if (!(Test-Path -Path $Destination -PathType Container)) {
        $null = New-Item -Path $Destination -Type Directory
    }
    Move-Item -LiteralPath $ExtGroup.Group -Destination $Destination -Force
}

答案 1 :(得分:0)

我相信这可以做到:

$variable = Get-ChildItem -Path "C:\somePath"
foreach ($v in $variable){
$dest = '{0}\{1}' -f  $v.DirectoryName, ($v.Extension -replace '^\.')
$v  | Move-Item -Destination $dest -Force
}