Home > front end >  How to search in multiple text files in dir for file names of jpg and then move them to correspondin
How to search in multiple text files in dir for file names of jpg and then move them to correspondin

Time:12-31

I have this folder with both text files and jpg files. Each text file contains information like

2021-01-12T07:22:14;0;R0010313.JPG 
2021-01-12T07:23:03;0;R0010314.JPG

where the R number corresponds to a jpg file of that name. Now, I want to read each text file, get the name of the jpgs and then move the jpgs to a new folder named the same as the text file then move on to the next text file. I managed to create the new folders with the correct name so now I just need to move the correct jpgs to the right folder. This is what I have so far:

$path = "C:\Users\Yo\Desktop\Brunnar" #Path where all the TXT files are
$TxtFiles = Get-ChildItem -Path $path -filter "*.txt"
$JpgFiles = Get-ChildItem -Path $path -filter "*.JPG"

$files = Get-Childitem $path | Where-Object { ! $_.PSIsContainer} #Get all files in the folder

#For each file in this folder
foreach ($file in $files){
    ## If it is a txt file
    if ([io.path]::GetExtension($file.Name) -eq ".txt"){ # If it is a .txt file
    
        $foldername = [io.path]::GetFileNameWithoutExtension($file) #Remove the fileextension in the foldername
        if (!(Test-Path "$path\$foldername")){ #If the folder doesn't exist
            New-Item "$path\$foldername" -ItemType "directory" #Create a new folder for the file
        }
       ## Move-Item $file.FullName "$path\$foldername" #Move file into the created folder
     

    Get-ChildItem -LiteralPath C:\Users\Yo\Desktop\Brunnar -Filter *.txt -File -Recurse | foreach {

    #$fileData = @{
       # "File"=$_.FullName;
        $content =(Get-Content -LiteralPath $_.FullName -Raw)
       
    #}
        if($content -match $JpgFiles.Name){
   
            #move jpg to the new folder
        } 
    
    }
    }
      
}


CodePudding user response:

Take a look at the following snippet (not tested).
It shows all the needed steps to perform your task but might need some adjustments.

$Path = 'C:\Users\Yo\Desktop\Brunnar'

# Process only the txt files in the direcotry
foreach ($TextFile in (Get-ChildItem -Path "$($Path)\*.txt" -File)) {
    # Get the content of the text file
    $Content = Get-Content -Path $TextFile.FullName

    # Get the r number from content
    $JPGFileName = $Content.Split(';')[2]

    # Create folder if not exists
    if (-not (Test-Path -Path "$($Path)\$($TextFile.BaseName)")) {
        New-Item -Path "$($Path)\$($TextFile.BaseName)" -ItemType Directory
    }

    # Move the jpg file to the new path
    if (Test-Path -Path "$($Path)\$($JPGFileName)") {
        Move-Item -Path "$($Path)\$($JPGFileName)" -Destination "$($Path)\$($TextFile.BaseName)\$($JPGFileName)"
    }
}
  • Related