Rename first 20 characters of every filename in a file

12,456

Solution 1

This may get you started. (There are probably much more concise ways, but this works and is readable when you need to maintain it later. :-) )

I created a folder C:\TempFiles, and created the following files in that folder:

TestFile1.txt
TestFile2.txt
TestFile3.txt
TestFile4.txt

(I created them the old-fashioned way, I'm afraid. <g>. I used

for /l %i in (1,1,4) do echo "Testing" > TestFile%i.txt

from an actual command prompt.)

I then opened PowerShell ISE from the start menu, and ran this script. It creates an array ($files), containing only the names of the files, and processes each of them:

cd \TempFiles
$files = gci -name *.txt
foreach ($file in $files) {
  $thename = $file.substring(4);
  rename-item -path c:\TempFiles\$file -newname $thename
}

This left the folder containing:

File1.Txt
File2.Txt
File3.Txt
File4.Txt
File5.Txt

In order to run a script from the command line, you need to change some default Windows security settings. You can find out about them by using PowerShell ISE's help file (from the menu) and searching for about_scripts or by executing help about_scripts from the ISE prompt. See the sub-section How To Run A Script in the help file (it's much easier to read).

Solution 2

Your code actually works. Two things...

  1. Rename the file to test.ps1.
  2. Run it in the folder you have your MP3 files in. Since you didn't provided a path to Get-ChildItem it will run in the current directory.

I tested your line by making a bunch of mp3 files like this -

1..30 | % { new-item -itemtype file -Name (
    $_.ToString().PadLeft(30, 'A') + ".mp3" )}
Share:
12,456
rusty009
Author by

rusty009

Updated on June 04, 2022

Comments

  • rusty009
    rusty009 over 1 year

    I am trying to write a script in powershell to remove the first 20 characters of every MP3 filename in a folder, I have created a file 'test.ps' and inserted the powershell code below into it,

    gci *.mp3 | rename-item -newname { [string]($_.name).substring(20) }
    

    When I run this file in powershell.exe nothing happens,

    Can anyone help? Thanks.