简体   繁体   中英

How to search in multiple text files in dir for file names of jpg and then move them to corresponding folders

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
        } 
    
    }
    }
      
}


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)"
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM