Home > Net >  Moving Files based on filename
Moving Files based on filename

Time:10-27

Im looking to move files based on the last half of the filename. Files look like this

43145123_Stuff.zip

14353135_Stuff.zip

2t53542y_Stuff.zip

422yg3hh_things.zip

I am only looking to move files that end in Stuff.zip I have this in PowerShell so far but it only will move files according to the first half of a file name.

#set Source and Destination folder location

$srcpath = "C:\Powershelltest\Source"

$dstpath = "C:\Powershelltest\Destination"

#Set the files name which need to move to destination folder

$filterLists = @("stuff.txt","things")

 
#Get all the child file list with source folder

$fileList = Get-ChildItem -Path $srcpath -Force -Recurse

#loop the source folder files to find the match

foreach ($file in $fileList)

{

#checking the match with filterlist

foreach($filelist in $filterLists)

{

#$key = $file.BaseName.Substring(0,8)

#Spliting value before "-" for matching with filterlists value

$splitFileName = $file.BaseName.Substring(0, $file.BaseName.IndexOf('-'))

 
if ($splitFileName -in $filelist)


{


$fileName = $file.Name

 
Move-Item -Path $($file.FullName) -Destination $dstpath

}

}

}

CodePudding user response:

There seems to be some differences between the state goal and what the code actually does. This will move the files to the destination directory. When you are confident that the files will be moved correctly, remove the -WhatIf from the Move-Item command.

$srcpath = "C:\Powershelltest\Source"
$dstpath = "C:\Powershelltest\Destination"
Get-ChildItem -File -Recurse -Path $srcpath |
    ForEach-Object {
        if ($_.Name -match '.*Stuff.zip$') {
            Move-Item -Path $_.FullName -Destination $dstpath -WhatIf
        }
    }

CodePudding user response:

Actually this can be written in PowerShell very efficiently (I hope I got the details right, let me know):

Get-ChildItem $srcpath -File -Force -Recurse | 
  where { ($_.Name -split "_" | select -last 1) -in $filterLists } |
  Move-Item $dstpath

Alternatively, if you only want to look for this one particular filter, you can specify that directly, using wildcards:

Get-ChildItem $srcpath -Filter "*_Stuff.zip"
  • Related