Home > Software design >  Windows Compare filenames and delete 1 version of the filename
Windows Compare filenames and delete 1 version of the filename

Time:11-03

I have several hundred folders where I will have multiple files called filename.ext but also another file called filename.ext.url

I need a way of checking if file1.pdf.url exists does filename.ext exist. If they both exist delete filename.ext.url

I can't just do a search and delete all *.url files as they will be needed if the normal file does not exist

I then need to repeat that in all subdirectories of a specific directory.

I don't mind its its a batch script, powershell script that does it or any other way really. I'm just stumped on how to do what I want.

Currently I'm doing it folder by folder, manually comparing file names, file size and file icon.

CodePudding user response:

foreach ($file in ls c:\files\*.url) {
    if (ls -ErrorAction Ignore "$($file.PSParentPath)\$($file.basename)") {
        remove-item $file.fullname -whatif
    }
}

remove whatif when ready to delete. the basename removes the extension, so if they are all .ext.url then it will check if that file exists. It also removes the path, so we pull that as well.

an alternative way (that more matches what you're explaining) is something like

foreach ($file in ls "c:\files\*.url") {
    ### replacing '.url$' means .url at the end of the line in Regex
    if (ls -ErrorAction Ignore ($file.FullName -replace '\.url$')) {
        remove-item $file.fullname -whatif
    }
}

CodePudding user response:

To check for "filename.ext", check for "filename.ext.", they are the same file.

In CMD.EXE, you can do "IF EXIST "filename.ext." CALL :DoIt

  • Related