this post was submitted on 16 Sep 2023
38 points (95.2% liked)

Asklemmy

43133 readers
1939 users here now

A loosely moderated place to ask open-ended questions

Search asklemmy 🔍

If your post meets the following criteria, it's welcome here!

  1. Open-ended question
  2. Not offensive: at this point, we do not have the bandwidth to moderate overtly political discussions. Assume best intent and be excellent to each other.
  3. Not regarding using or support for Lemmy: context, see the list of support communities and tools for finding communities below
  4. Not ad nauseam inducing: please make sure it is a question that would be new to most members
  5. An actual topic of discussion

Looking for support?

Looking for a community?

~Icon~ ~by~ ~@Double_A@discuss.tchncs.de~

founded 5 years ago
MODERATORS
 

In case of renaming multiple file extensions to another, they suggested to type this command in cmd promt or powershell: ren *.(current extension name) *.(new extension name)

But what about to renaming multiple file extensions to nil or no file extension? How to replace this command *.(new extension name) ?

all 38 comments
sorted by: hot top controversial new old
[–] MamaVomit@hexbear.net 13 points 11 months ago (1 children)

If you're open to using a GUI, check out Microsoft PowerToys, specifically PowerRename.

[–] Squa64res@lemmy.ml 3 points 11 months ago
[–] Heavybell@lemmy.world 13 points 11 months ago (1 children)

https://github.com/microsoft/PowerToys

PowerToys has a bunch of cool features, and a bulk rename utility is one of them.

Powershell can also do it if you feel like learning more about it. I don't know about the command example you gave, and am away from my PC so I can't test it, but using pipes in powershell something like this might work: ls [[insert wildcard here e.g. *.txt]] | % { mv $_ [System.IO.Path]::GetFilenameWithoutExtension($_.Name) }

Just remove the double brackets and put whatever your filter was. The results of which get passed into % which each in turn into the code block as $_. So for every result of the ls command, it runs mv (move/rename).

[–] infinipurple@lemm.ee 3 points 11 months ago

PowerToys is the way.

[–] tleb@lemmy.ca 6 points 11 months ago

Microsoft power toys has a utility for mass file renaming.

[–] Gobo@lemmy.world 4 points 11 months ago (1 children)
[–] captsneeze@lemmy.one 1 points 11 months ago

This is the answer I would go with. I’ve used this utility for many many years, and for dozens of different needs. It’s a great Swiss-army-knife for renaming needs.

[–] kaitco@lemmy.world 3 points 11 months ago (2 children)

There’s an application called Ant Renamer. It’s free and I’m pretty sure it’s FOSS. Ant Renamer will let you batch rename files and even change extensions.

That said, I’m unsure why you’d want to do this with multiple file extensions, but to each his own…

[–] intensely_human@lemm.ee 6 points 11 months ago (1 children)

OP wants to rename some files not ants. Please read the post before responding thanks. I’m sure Ant Renamer’s great for entomological scenarios but this is a computer thing.

[–] kaitco@lemmy.world 3 points 11 months ago

That’s fair and entirely on me. Just want these danged ants renames already!

[–] all-knight-party@kbin.cafe 1 points 11 months ago

There's also a program free for personal use called Bulk Rename. It has an incredible amount of custom options that the Microsoft power toys couldn't do, that I needed. Just in case your program isn't super extensive on the options and possibilities, FOSS is preferred unless necessary

[–] kuneho@lemmy.world 3 points 11 months ago

Total Commander. It has batch renaming with all the parameters you want.

[–] captsneeze@lemmy.one 3 points 11 months ago (1 children)

I’m curious, for what reason would one need/want to do this?

[–] Brotherly@lemm.ee 2 points 11 months ago (1 children)

I'm not a cmd prompt expert, but does

ren *.(current extension name) *

work?

To test it, make a new directory and create 2 files there with the same extension. Then, run that code in that directory and check the result.

[–] Squa64res@lemmy.ml 1 points 11 months ago (2 children)
[–] Tolookah@discuss.tchncs.de 2 points 11 months ago (1 children)
[–] intensely_human@lemm.ee 2 points 11 months ago

It’s all wrong!

[–] dudemanbro@lemmy.dbzer0.com 1 points 11 months ago

The cmd route should work. Done it many times doing like .mp4 to .m4b. You go I to cmd (command). Type the following: cd "FILE-PATH" (without quotations). Hit enter. Then type: ren *.file-type *.file-type Example would look like: ren *.jpg *.PNG This woukd be renamed the files all from jpg to png

[–] driving_crooner@lemmy.eco.br 1 points 11 months ago (1 children)

I have no idea what im talking about, but why not try in a folder with a couple of files writing nothing after the *. ?

[–] Squa64res@lemmy.ml 2 points 11 months ago (1 children)

there are more than 300 files in multiple folders that I need to remove the file.extension, doing it 300 times is a tad difficult.

[–] intensely_human@lemm.ee 2 points 11 months ago

The purpose of trying it in a folder with a few options is to perfect the command before applying it to the entire target pool.

[–] SpaceNoodle@lemmy.world 1 points 11 months ago* (last edited 11 months ago) (2 children)
  1. Set up WSL
  2. for file in * ; do mv "$file" $(basename "$file") ; done

Edit: the other commenter is right, I fucked up the usage of basename.

[–] FooBarrington@lemmy.world 3 points 11 months ago

No, that doesn't work, you have to pass the suffix you want to remove to basename:

$ touch test.txt
$ basename test.txt
test.txt
$ basename test.txt .txt
test
[–] hddsx@lemmy.ca 0 points 11 months ago* (last edited 11 months ago) (2 children)

newfile=$(echo $file|sed ‘s/..*//‘)

[–] federalreverse@feddit.de 2 points 11 months ago* (last edited 11 months ago)

That's a bit dangerous for a few reasons:

  1. cat is the wrong command, because it outputs the file's content, not the file's name.
  2. my.awesome.file.txt would become an empty string, leading to errors. (The regex is not anchored to the end of the string ($), the . is not escaped, so it becomes a wild card, ...)
  3. My awesome file.txt would trip up the loop and lead to unwanted results.

I'd suggest this:

for file in * ; do mv “$file” $(echo “$file” | sed -r 's/(\.tar)?\.[^.]*$//') ; done

[–] SpaceNoodle@lemmy.world 1 points 11 months ago* (last edited 11 months ago)

Wow, cat and sed, double unnecessary and extra wrong.

[–] minticecream@lemmy.world 1 points 11 months ago (3 children)

This would be a great question for chatGPT.

[–] dfyx@lemmy.helios42.de 7 points 11 months ago (1 children)

I wouldn’t trust chatGPT on this. Sure, there’s a good chance it gets it right but also a non-negligible chance it gets it catastrophically wrong and you accidentally delete the files or rename them to something that’s even harder to fix.

[–] Hamartiogonic@sopuli.xyz -4 points 11 months ago* (last edited 11 months ago)

Best case scenario, you get the right regex command on the first try. Not super likely though, so it’s good to try it out with a backup located in a separate folder.

Worst case scenario: GPT is giving you a command with the -r switch and you apply it to the root. You’ll end up nuking the whole drive. Not super likely either, but it’s good to be able to understand this part of the command before running it.

The way I see it, GPT is the author, and you’re the editor/publisher. It’s your responsibility to check the book before publishing it.

[–] TheEntity@kbin.social 4 points 11 months ago (1 children)

Is this the new "just google it"?

[–] bionicjoey@lemmy.ca 2 points 11 months ago

Yes but it's much stupider

[–] foggy@lemmy.world 2 points 11 months ago

To rename multiple file extensions to have no file extension, you can use a wildcard character to match all files with the current extension and then replace it with nothing (an empty string). Here's the command you can use in Command Prompt or PowerShell:

For Command Prompt:

ren *.(current extension name) *.

For PowerShell:

Get-ChildItem *.(current extension name) | Rename-Item -NewName { $_.Name -replace '.(current extension name)$', '' }

Replace "(current extension name)" with the actual extension you want to remove, and this command will remove the extension from all matching files

Idk if it's accurate but that was it's response to OPs input

[–] hddsx@lemmy.ca 0 points 11 months ago (1 children)

You might have to do a bit of testing as windows may add weird characters, but you could try WSL and use a bash

[–] taniyuki@lemmy.world 1 points 10 months ago

How to batch rename extensions. Navigate to the folder containing the files you want. Once there, launch command prompt from the folder menu by holding down shift and right clicking on an empty space. Once in command prompt, tiny fishing you can now use the “ren” (for rename) command to rename for example,