• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Batch rename of files

R

robm_jnb

#1
Hi everyone,

I have a problem in that I need to compose a PowerShell script to rename
about 200 files. These files are the in the example format:

sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf

Basically I need the script to just leave the file name, and get rid of the
jibberish. So after running it should rename the file to:

sample pdf document.pdf

I have looked at both regular expressions and the trim function, but have
not got very far. I would really appreciate any help that people can give.

Thanks in advance.
 

My Computer

T

Tao Ma

#2
Hi robm_jnb,

Try:
Get-Item *.pdf | % { Move-Item -Whatif $_ ($_.Name -replace 'pdf.*?pdf$') }

If it works like you wish, remove '-Whatif' to let it get the work done.

"robm_jnb" <robm_jnb@xxxxxx> дÈëÏûÏ¢ÐÂÎÅ:16B5EFB4-CB81-4D44-BFEB-1B31E9B44B5F@xxxxxx

> Hi everyone,
>
> I have a problem in that I need to compose a PowerShell script to rename
> about 200 files. These files are the in the example format:
>
> sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf
>
> Basically I need the script to just leave the file name, and get rid of
> the
> jibberish. So after running it should rename the file to:
>
> sample pdf document.pdf
>
> I have looked at both regular expressions and the trim function, but have
> not got very far. I would really appreciate any help that people can give.
>
> Thanks in advance.
 

My Computer

K

Kiron

#3
Hi Rob,
# If this suffices...
'sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf'.split('_')[0]

# you can do:
# (using -wi to test, remove it to rename the files if satisfied)
ls $dir | ? {!$_.psIsContainer} | rni -new {$_.name.split('_')[0]} -wi

# or...
ls $dir *.pdf | rni -new {$_.name.split('_')[0]} -wi

--
Kiron
 

My Computer

K

Kiron

#4
Oops! Bad copy 'n' paste from my part:

# using -Replace operator and a short RegEx
'sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf' -replace '_.+$'

# different extensions
ls $dir | ? {!$_.psIsContainer} | rni -new {$_.name -replace '_.+$'} -wi

# only PDF files
ls $dir *.pdf | rni -new {$_.name -replace '_.+$'} -wi

--
Kiron
 

My Computer

R

robm_jnb

#5
That was a great help, thanks for that. I have changed the script slightly:

Get-ChildItem -recurse -include *.* | % { Rename-Item -WhatIf $_($_.Name
-replace 'pdf.*?pdf$') }

Do you know if it would be possible to extract the file extension off the
end of the file name? Due to the files being renamed are of different
extensions, it would be handy if the script logically knew the extension and
stored it into a variable. So, does anyone know how to extract the last 4
characters and store it in a variable?

"Tao Ma" wrote:

> Hi robm_jnb,
>
> Try:
> Get-Item *.pdf | % { Move-Item -Whatif $_ ($_.Name -replace 'pdf.*?pdf$') }
>
> If it works like you wish, remove '-Whatif' to let it get the work done.
>
> "robm_jnb" <robm_jnb@xxxxxx> ôÈëÃûâÃÂÎÅ:16B5EFB4-CB81-4D44-BFEB-1B31E9B44B5F@xxxxxx

> > Hi everyone,
> >
> > I have a problem in that I need to compose a PowerShell script to rename
> > about 200 files. These files are the in the example format:
> >
> > sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf
> >
> > Basically I need the script to just leave the file name, and get rid of
> > the
> > jibberish. So after running it should rename the file to:
> >
> > sample pdf document.pdf
> >
> > I have looked at both regular expressions and the trim function, but have
> > not got very far. I would really appreciate any help that people can give.
> >
> > Thanks in advance.
>
>
>
 

My Computer

T

Tao Ma

#6
Hi,

$_.Extension contains the file extension.
$_.BaseName contains the filename without extension.
I assume that there is only one 'dot' in the BaseName.

Before removing '-Whatif' parameter, please check the outputs carefully.

Get-ChildItem -Recurse | ?{ ! $_.PSIsContainer } | %{ Rename-Item -Whatif
$_.FullName ( ($_.BaseName -replace '\.[^.]*$') + $_.Extension) }

Tao Ma

"robm_jnb" <robmjnb@xxxxxx> дÈëÏûÏ¢ÐÂÎÅ:919D2E64-F683-4655-AEC8-FF084F0C7FC0@xxxxxx

> That was a great help, thanks for that. I have changed the script
> slightly:
>
> Get-ChildItem -recurse -include *.* | % { Rename-Item -WhatIf $_($_.Name
> -replace 'pdf.*?pdf$') }
>
> Do you know if it would be possible to extract the file extension off the
> end of the file name? Due to the files being renamed are of different
> extensions, it would be handy if the script logically knew the extension
> and
> stored it into a variable. So, does anyone know how to extract the last 4
> characters and store it in a variable?
>
> "Tao Ma" wrote:
>

>> Hi robm_jnb,
>>
>> Try:
>> Get-Item *.pdf | % { Move-Item -Whatif $_ ($_.Name -replace
>> 'pdf.*?pdf$') }
>>
>> If it works like you wish, remove '-Whatif' to let it get the work done.
>>
>> "robm_jnb" <robm_jnb@xxxxxx> D¡ä¨¨????¡éD???:16B5EFB4-CB81-4D44-BFEB-1B31E9B44B5F@xxxxxx

>> > Hi everyone,
>> >
>> > I have a problem in that I need to compose a PowerShell script to
>> > rename
>> > about 200 files. These files are the in the example format:
>> >
>> > sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf
>> >
>> > Basically I need the script to just leave the file name, and get rid of
>> > the
>> > jibberish. So after running it should rename the file to:
>> >
>> > sample pdf document.pdf
>> >
>> > I have looked at both regular expressions and the trim function, but
>> > have
>> > not got very far. I would really appreciate any help that people can
>> > give.
>> >
>> > Thanks in advance.
>>
>>
>>
 

My Computer

R

robm_jnb

#7
Thanks for your reply - I have taken your script and modified it to this:

get-childitem -recurse | where-object {$_.Name -match "_DEL_T"} | ?
{!$_.psIsContainer} | rni -new {$_.name -replace "_\(.+$"} -wi

Thanks for all your help - I couldn't have done it without you.

"Tao Ma" wrote:

> Hi,
>
> $_.Extension contains the file extension.
> $_.BaseName contains the filename without extension.
> I assume that there is only one 'dot' in the BaseName.
>
> Before removing '-Whatif' parameter, please check the outputs carefully.
>
> Get-ChildItem -Recurse | ?{ ! $_.PSIsContainer } | %{ Rename-Item -Whatif
> $_.FullName ( ($_.BaseName -replace '\.[^.]*$') + $_.Extension) }
>
> Tao Ma
>
> "robm_jnb" <robmjnb@xxxxxx> ôÈëÃûâÃÂÎÅ:919D2E64-F683-4655-AEC8-FF084F0C7FC0@xxxxxx

> > That was a great help, thanks for that. I have changed the script
> > slightly:
> >
> > Get-ChildItem -recurse -include *.* | % { Rename-Item -WhatIf $_($_.Name
> > -replace 'pdf.*?pdf$') }
> >
> > Do you know if it would be possible to extract the file extension off the
> > end of the file name? Due to the files being renamed are of different
> > extensions, it would be handy if the script logically knew the extension
> > and
> > stored it into a variable. So, does anyone know how to extract the last 4
> > characters and store it in a variable?
> >
> > "Tao Ma" wrote:
> >

> >> Hi robm_jnb,
> >>
> >> Try:
> >> Get-Item *.pdf | % { Move-Item -Whatif $_ ($_.Name -replace
> >> 'pdf.*?pdf$') }
> >>
> >> If it works like you wish, remove '-Whatif' to let it get the work done.
> >>
> >> "robm_jnb" <robm_jnb@xxxxxx> D¡ä¨¨????¡éD???:16B5EFB4-CB81-4D44-BFEB-1B31E9B44B5F@xxxxxx
> >> > Hi everyone,
> >> >
> >> > I have a problem in that I need to compose a PowerShell script to
> >> > rename
> >> > about 200 files. These files are the in the example format:
> >> >
> >> > sample pdf document.pdf_(2008-05-24_04-16-15_DEL_T).pdf
> >> >
> >> > Basically I need the script to just leave the file name, and get rid of
> >> > the
> >> > jibberish. So after running it should rename the file to:
> >> >
> >> > sample pdf document.pdf
> >> >
> >> > I have looked at both regular expressions and the trim function, but
> >> > have
> >> > not got very far. I would really appreciate any help that people can
> >> > give.
> >> >
> >> > Thanks in advance.
> >>
> >>
> >>
>
>
>
 

My Computer

Users Who Are Viewing This Thread (Users: 1, Guests: 0)