Search code examples
powershellfindmove

Powershell find and move file


I have a long list of find and move operations, I want to slim down the script by substituting the following 2 long commands with 2 short variables.

Short variables:

$f = 'Get-ChildItem -Recurse -Filter'
$m = 'Move-Item -Force -Verbose -Destination V:\MSL\_pdf\'

Long commands:

Get-ChildItem -Recurse -Filter GAS*.pdf | Move-Item -Force -Verbose -Destination V:\MSL\_pdf\GAS
Get-ChildItem -Recurse -Filter GCA_00*.pdf | Move-Item -Force -Verbose -Destination V:\MSL\_pdf\GCA\GCA_00
Get-ChildItem -Recurse -Filter GCA_01*.pdf | Move-Item -Force -Verbose -Destination V:\MSL\_pdf\GCA\GCA_01

And this doesn't work:

$f GAS*.pdf | $m`GAS
$f GCA_00*.pdf | $m`GCA\GCA_00
$f GCA_01*.pdf | $m`GCA\GCA_01

Solution

  • As @Lee said in the comment, you should use function:

    function GetAndMove($files, $dest)
    {
       $dest = "V:\MSL\_pdf\$($dest)"
       Get-ChildItem -Recurse -Filter $files | Move-Item -Force -Verbose -Destination $dest
    }
    
    # Now call the function
    GetAndMove "GAS*.pdf" "GAS"
    GetAndMove "GCA_00*" "GCA\GCA_00"
    GetAndMove "GCA_01*" "GCA\GCA_01"
    

    ...